Google지도는 API 키를 어떻게 보호하나요? 비슷한 것을 만드는 방법?
현재 Google에서는지도가 제공 될 도메인에 고유 한 API 키를 생성해야합니다. Google은이를 어떻게 시행합니까? 저도 똑같은 일을하고 싶습니다.
내 서비스에 대한 API를 노출하지만 클라이언트가 서버뿐만 아니라 자바 스크립트를 통해 API 호출을 포함하도록 허용하고 싶습니다. 나는 임의의 토큰으로 그것을 보호 할 수 있지만 물론 이것은 클라이언트 컴퓨터에서 코드를 보는 사람에 의해 쉽게 스푸핑 될 수 있습니다.
나는 항상이 개념이 가능하지 않다는 것을 이해했지만 어떻게 든 Google이 그것을 시행하는 데 잘하고 있습니다.
편집-Google이 결국 놀라운 일을하지 않은 것 같습니다. 그들의 API는 추적 용일 가능성이 높으며 키를 가진 사람이 API를 사용한다는 것을 보장하지는 않습니다.
나는 그들이 REFERER URL을 사용하여 호출이 어디에서 오는지 결정한다고 확신합니다. 도메인이 키에 할당 된 것과 일치하지 않으면 잘못된 요청입니다.
실용적인 예를 들어, PHP를 사용 $_SERVER['HTTP_REFERER']
하여 참조자를 확인하는 데 사용하는 도메인 을 확인할 수 있습니다 . 도메인이 일치하면 유효한 응답을 반환합니다. 그렇지 않은 경우 401 Unauthorized 또는 기타 응답을 반환 할 수 있습니다.
API 키 자체는 아마도 키가 연결된 도메인의 단방향 해시이며 Google API 서버 만 알고있는 비밀 일 것입니다. 여기에는 (물론 Google에) 잘 알려진 정보가 포함될 수 있습니다. 해당 도메인에서 요청을 할 때 API 서버는 요청이 들어온 도메인을 가져와 동일한 단방향 해시 계산을 수행하고 두 값을 비교합니다.
Ajax 호출의 경우 대부분 참조자를 사용하여 문서 호스트의 도메인을 가져옵니다. 리퍼러는 스푸핑 될 수 있지만 궁극적으로 API를 사용하려면 문서에서 Google javascript를 실행해야합니다. 이 시점에서이 자바 스크립트는 Ajax API 호출을 호출 한 문서가 실제로 대상 서버에서 시작되었는지 확인할 수 있습니다. 물론 DOM 구현이 있거나 스크립트를 즉석에서 수정했다면 스푸핑이 가능합니다. 그러나 이러한 스푸핑은 클라이언트 측에서 발생해야하며 Google API를 사용하려는 웹 사이트가 클라이언트 소프트웨어를 스푸핑 할 수있는 가능성은 매우 적습니다.
API는 기본적으로 무료이므로 API에 대한 익명 액세스도 제공 할 수 있습니다. 분명히 Google의 의도는 무단 액세스를 보호하는 것이 아니라 해당 데이터 사용에 대해 가능한 한 많은 데이터를 수집하고 해당 사용을 대상 도메인에 대해 수집 한 다른 데이터와 연결할 수 있도록하는 것입니다. 따라서 API 키 확인이 위에서 설명한 것보다 훨씬 더 복잡 할 것으로 예상하지 않습니다. 고급 접근 방식에 대한 ROI가 너무 낮습니다.
물론 API를 통한 XSS 공격 가능성에 대한 우려도 있습니다. 그러나 나는 그들의 API 키가 그들이 가지고있는 어떤 anti-XSS 코드에 너무 많이 묶여 있다고 생각하지 않습니다.
내 의견에 따르면 :
REFERER는 스푸핑이 가능하므로 Google이이를 확인 수단으로 사용하지 않을 가능성이 높습니다. 이 wikipedia 항목을 참조하십시오 .
내 생각 엔 Google은 DNS 조회와 함께 호출자의 IP 주소를 사용합니다. DNS는 실제로 스푸핑 할 수 없습니다. 웹 사이트가 사용자에게 도달하려면 DNS 항목이 정확해야하기 때문입니다.
그러나 서버가 라운드 로빈 IP 주소 DNS 설정을 사용하면 DNS 조회를 수행 할 때 Google이 다른 IP 주소로 리디렉션되기 때문에 문제가 있습니다.
FAQ에서
http://www.mygooglemapssite.com/ 의 키 는이 주소를 사용하여 사이트에 액세스 할 때만 허용됩니다. IP 주소 (예 : http://10.1.2.3/ ) 또는 DNS CNAME 레코드를 사용하여 www.mygooglemapssite.com으로 별칭이 지정된 호스트 이름으로 사이트에 액세스하는 경우에는 허용되지 않습니다 .
내 생각 엔 Host
페이지를 요청할 때 전송 되는 헤더를 사용하고있을 수 있는데, 일반적으로 Google이 페이지에 API 스크립트를 직접 포함하도록 요청하는 것처럼 작동합니다. 그런 다음 해당 스크립트는 현재 페이지의 헤더에 액세스하고이를 사용하여 확인할 수 있습니다.
내 추측은 IP 주소 또는 별칭에 대해 작동하지 않는다는 사실로 백업되며 이는 DNS 검사를 수행하지 않음을 의미합니다.
이 방법은 페이지에 액세스하려면 올바른 헤더 여야하므로 스푸핑 할 수 없습니다. 그러나 이는 도메인에 대한 별칭이 작동하지 않음을 의미합니다.
그러나 이것은 또한이 서버 측을 확인할 수 없으므로 코드에 액세스하려면 Javascript 라이브러리를 제공해야 함을 의미합니다.
나는 Franci Penov가 열거 한 모든 요점에 동의합니다 . 다른 사람의 API 키를 사용하는 방법에 대해 조금 자세히 설명하고 싶습니다. 우리가 등록 가정하자 key1
와 함께 example.com
.
첫 번째 시도 - 경우
anothersite.com
가<script src="http://www.google.com/jsapi?key=key1">
구글이 자사의 리퍼러 확인할 수 있습니다 (해시 방식은 언급)이 경우에 불일치가있다. 많은 사람들이 리퍼러가 스푸핑 될 수 있다고 언급했기 때문에 악의적 인 공격자는 어떻게 이것을 극복합니까? 여기에는 실제로 적용되지 않습니다. 물론 요청하면 임의의 헤더를 보낼 수 있지만, 어떻게 악의적 인 해커가 사용자를위한 리퍼러를 스푸핑anothersite.com
합니까? 이것은 일반적으로 쉽지 않습니다. 공격자가 도메인 간 요청을 할 때 임의의 헤더를 설정할 수있는 이전 버전의 플래시가 IE 6에 있었지만 일반적으로 스크립트에서는 작동하지 않습니다src
. 포함 된 Javascriptdocument.location
가이를 방지하기 위해 유효성 검사를 수행하는지 확실하지 않습니다 (아마도 그렇지 않음).두 번째 시도 – 악의적 인 공격자가
mysite.com
의 페이지 소스 에서 API 키에 대한 Google 자바 스크립트를 복사 한 다음 수정 된 자바 스크립트를에 삽입합니다anothersite.com
. 이제 Google은 아무것도 확인할 수 없습니다 (원격 IP는 사용자의 컴퓨터이며 사용자 나 Google이 할 수있는 작업이 많지 않습니다).
따라서 어떤 이유로 든 API 키를 비밀로 유지하려면 (악의적 인 사람이 키를 블랙리스트 / 차단할 수 있음) 서버를 통해 클라이언트 및 프록시 요청에 키를 포함하지 마십시오 (애플리케이션 코드에는 키).
작동하는 이유는 자바 스크립트로 API 호출을 할 수 없기 때문입니다. 브라우저 보안은 javascript가 javascript가 시작된 도메인을 제외한 모든 곳에서 요청을하지 못하도록합니다. 이 때문에 자바 스크립트의 모든 API 호출은 API 키가 저장된 서버를 통해 반송되어야합니다 (API 키는 자바 스크립트에서 볼 수 없음).
'Development Tip' 카테고리의 다른 글
Parcelable 클래스에서 java.util.Date 읽기 및 쓰기 (0) | 2020.10.25 |
---|---|
Android Studio 2.0-플러그인이 너무 오래되었습니다. 최신 버전으로 업데이트하거나 ANDROID_DAILY_OVERRIDE 환경 변수를 (0) | 2020.10.25 |
Maven 종속성으로서의 JDK tools.jar (0) | 2020.10.24 |
Akka의 Actor와 Scala의 Actor 모델의 차이점은 무엇입니까? (0) | 2020.10.24 |
API를 사용하여 기본 MailChimp 가입 양식 만들기 (0) | 2020.10.24 |