2016-07-05 2 views
1

Google은 사용자가 가입 할 수있는 서비스를 제공하고 있습니다. 이 프로세스는 자동 로그인을 방지하기 위해 reCAPTCHA의 보호를받습니다. 문제는 모바일 장치에서 reCAPTCHA는 편리하지 않다는 것입니다. 따라서 우리는 가입 API가 reCAPTCHA 응답 대신 토큰도 허용 할 것이라고 결정했습니다.휴대 기기에서 보안 문자 대체

이제 토큰을 구현하는 방법에 대해 질문합니다. 우리의 첫 번째 접근법은 모바일 애플리케이션에 서버에 토큰으로 전송되는 일정한 비밀을 부여하는 것이 었습니다. 그러나 해커가 요청을 서버로 리디렉션하면 API 도메인의 DNS 레코드를 업데이트하고 모바일 장치에 신뢰할 수있는 인증서를 설치하여이 비밀을 밝힐 수 있습니다.

우리의 마지막 접근 방식은 username + secret에 대해 HMAC-SHA1이라는 토큰을 계산하는 것입니다. 여기에 secred가 필요합니까? 입력을 충분히 길게 만드는 것일 수도 있습니다. 사용자 이름은 가입 입력에서 가져옵니다. 그런 다음 서버는 해시의 유효성을 검사하여 권한을 부여합니다. 그의 경우에는 재생 공격을 할 수는 있지만 중복 된 사용자 이름이 거부되므로 문제가되지 않습니다.

이 방법이 맞습니까? 모바일 장치에 captcha의 다른 대안이있을 수 있습니까?

iOS (ipa 파일)에서 응용 프로그램을 가져오고 리버스 엔지니어링 할 수도 있습니다. 응용 프로그램이 Appstore에서 호스트되고 키 (및 암호)를 추출한다는 점을 감안할 때 가능합니까?

안드로이드의 경우 가능합니다 -이를 방지 할 수있는 방법이 있습니까?

답변

0

우리는 Hawk과 결부하여 철수를 통해 자격 증명을 보내지 않기로 결정했습니다. 앱을 리버스 엔지니어링하고 비밀 키를 가져올 수 없어야하는 iOS에 사용됩니다. Android의 경우 Android 용 reCAPTCHA 라이브러리를 사용합니다.

0

단점을 발견했습니다. 동일한 사용자에 대해 변경되지 않는 토큰이 여전히 있습니다. 귀하의 유스 케이스 (등록)에서는 괜찮지 만, 유용하지 않은 다른 유스 케이스가있을 수 있습니다 (예 : 비밀번호 복구 기능).이 경우 해커가 사용자 이름을 묻는 모든 사용자에게 유효한 토큰을 생성 할 수 있습니다).

내 솔루션은 다음과 같습니다

  • 은 "공공 토큰을"소요와 보안 문자를 해결하는 "비밀 토큰을"만듭니다 (모바일 앱 및 백엔드 모두에서) 알고리즘을 작성합니다. 그것은 단순한 SHA1 해시 (나는 권장하지 않음), 공용 토큰과 소금, 사용자 ID 및 공개 토큰 등의 조합 일 수 있습니다.
  • 공용 및 비밀 토큰을 생성하는 엔드 포인트를 API에서 작성하십시오 . 백엔드에 비밀 토큰을 저장하고 공개 토큰을 클라이언트 (모바일 앱)에 반환하십시오.
  • 그러면 공개 토큰을 요청하고 비밀 토큰을 생성하여 API로 보내야합니다. API는 비밀 토큰이 이미 데이터베이스에 저장되어 있는지 확인하고, 그렇다면 captcha가 해결됩니다.

저장된 비공개 토큰을 X 초 후에 만료 시키면 개선 될 수 있습니다.

희망 하시겠습니까?

관련 문제