웹 API를 보호하는 모범 사례는 무엇입니까? 앱이 서버 및 데이터베이스와 상호 작용할

ASP.Net MVC 4에서 모바일 앱이 서버 및 데이터베이스와 상호 작용할 수 있도록 웹 서비스 API를 구축해야하지만 그다지 관련이 없습니다. 대부분의 작업에는 사용자가 서비스에 등록 할 필요가 없으므로 앱 사용자 만 액세스를 제한하고 싶습니다.

다른 곳에서 온 전화 (예 : 모든 데이터를 원하거나 비공식 앱 구축)가 거부되도록하는 방법은 무엇입니까?

내 초기 아이디어는 장치가 서버에 임의로 토큰을 무작위로 생성하여 보내도록 요청하는 것입니다. 다른 모든 방법은 요청 헤더에 솔트 토큰의 md5 해시가 될 특정 헤더가 포함되어 있는지 확인합니다. 서버는 토큰과 솔트를 알고 있으며 해시를 계산하여 보낸 것과 비교할 수 있습니다. 또한 토큰의 수명이 제한되어 있으며 장치는 1 시간마다 다른 토큰을 가져와야합니다.

구현하기가 쉽고 100 % 증거는 아니지만 좋은 아이디어 인 것 같습니다. 어떻게 생각해?



답변

응용 프로그램을 릴리스하자마자 리버스 엔지니어링 될 수 있습니다. 즉, 동일한 응용 프로그램 (같은 바이너리, 동일한 설정)이 모든 사용자에게 배포 된 경우 100 % 보호 할 수있는 방법이 없습니다.

모든 사용자에 대해 애플리케이션을 사용자 정의 할 수있는 경우 다른 애플리케이션이 API를 사용하는 것을 금지 할 수는 있지만 적어도 API에 대해 수행 할 수있는 요청 수에 따라이 애플리케이션을 제한 할 수 있습니다.

다음 스키마를 상상해보십시오.

  1. 클라이언트는 고유 식별자 (사용자 별 식별자)를 연결하고 보냅니다.
  2. 서버는 공개 키로 암호화 된 챌린지를 보내 회신합니다. 이 공개 키는 이전에 보낸 고유 식별자와 연결됩니다.
  3. 클라이언트는 개인 키를 사용하여 데이터를 해독하여 문제를 해결하고 해독 된 비밀을 일반 서버로 다시 보냅니다.
  4. 서버는 제출 된 비밀이 원래 생성 된 비밀과 일치하는지 확인합니다.

응용 프로그램을 해킹하고 개인 키를 성공적으로 얻는 개발자는 자신의 응용 프로그램에서 API를 사용할 수 있지만 서버의 식별자가됩니다.

동일한 사용자가 하루에 10 만 건의 API 요청을 할 수 있고 평균적으로 활성 사용자가 하루에 2 천 건을 요청하면이 개발자는 자신의 응용 프로그램을 직접 사용하여 친구에게 줄 수는 있지만 그는 아침에 몇 분 동안 만 작동하기 때문에 수천 명의 사람들에게 판매 할 수 없었습니다.

이것이 도움이 되더라도 100 % 증거는 아닙니다. 해커가 자신의 앱이 기기에 설치되어있을 때 앱에서 개인 키를 추출하는 방법을 찾으면 어떻게 되나요?


귀하의 질문에 대답하지는 않지만 여전히 유용 할 수있는 참고 사항 : API를 기본 제품 (모바일 응용 프로그램) 도구 로 생각하지 마십시오 . 그것을 일급 제품 자체, 지불 할 수있는 제품 으로 생각하십시오 .동일한 모델이 Amazon 및 Google에서 수년 동안 사용되었으며 Azure 등에서 Microsoft에서 적극적으로 사용하기 시작했습니다.

반짝이는 새로운 모바일 앱의 보조 도구가 아닌 보조 도구로 API를 고려하지 말고 실제 제품은 사용자가 실제로 보는 응용 프로그램과 동일한 수준에서 API를 보호하는 방법에 대해 덜 생각하기 시작합니다. 다른 앱의 사용량 및 API 자체 수익 창출에 대한 자세한 내용 이러한 API는 고객 인 앱이나 다른 사람이 자유롭게 개발 한 다른 앱에서 사용할 수 있습니다. 여기에는 몇 가지 이점이 있습니다.

  • 이에서만 사용 될 수 있도록 API를 제작 하여 애플리케이션하는 것은 어렵고 비싸다. 이 시간과 돈은 더 유용한 것으로 사용될 수 있습니다.

  • API를 공개하면 사용자와 세계 모두에게 큰 이점이 있습니다. 훌륭한 건축가이자 훌륭한 개발자라고 생각하면 놀랍도록 훌륭한 API를 만들었지 만 시각적 디자이너 기술이 빨라지고 상호 작용 디자인 등에 대해 전혀 이해하지 못합니다. API를 숨기면 유일한 사람들이 알 수있는 것은 사용할 수없고 추악한 모바일 응용 프로그램을 만들었다는 것입니다. API가 공개적이라면 다른 개발자들은 그 품질에 매료되어 훌륭한 응용 프로그램을 작성하여 많은 돈을 가져옵니다.

  • 다른 사람들이 귀하의 API를 어떻게 사용하는지 상상하지 마십시오. 이것이 Kinect에서 일어난 일입니다. 원래 Microsoft는 게임용 Kinect를 만들었습니다. Microsoft가 대중에게 API를 공개했을 때, 몇 년 후 과학 응용 프로그램, 건강 부문 등에서 API가 사용될 것이라고는 상상하지 못했습니다. 웹 API와 유사합니다.


답변