웹 서비스 API Keys 및 Ajax - 키 보호
이것은 일반적인 보안 질문일 수도 있지만, 제가 개발하고 있는 분야에 대해 물어보려고 생각했습니다.
시나리오: API Key를 사용하여 사용자가 누구인지 확인하고 알려주는 웹 서비스(WCF Web Api)와 프런트 엔드에 jQuery와 애플리케이션이 혼합되어 있습니다.
한편으로는 트래픽이 https일 수 있으므로 검사할 수 없지만, 사용자당 동일한 키(예: guid)를 사용하고 두 개 모두에서 사용하면 해당 키가 찍힐 가능성이 있고 사용자를 사칭할 수 있습니다.
내가 OAuth와 유사한 것을 구현하면 사용자와 앱별 키가 생성되고, 그것이 작동할 수 있지만, jQuery 측에서는 여전히 자바스크립트에 앱 API 키가 필요합니다.
이것은 누군가가 실제 컴퓨터에 있고 뷰 소스를 수행하는 경우에만 문제가 될 수 있습니다.
어떻게 해야 하나?
- md5 아니면 어떻게든 키를 암호화합니까?
- 세션 변수에 키를 넣은 다음, Ajax를 사용하여 키를 검색할 때?
- 극복하세요, 그렇게 큰 문제는 아닙니다.
저는 그것이 아마도 흔한 문제일 것이라고 확신합니다. 그래서 어떤 조언이든 환영할 것입니다.
이것을 더 명확하게 하기 위해 - 이것은 구글 등이 아니라 제가 작성한 제 API입니다.세션별 토큰 등을 수행할 수 있도록 클라이언트 측 토큰/키를 보호하는 최선의 방법을 찾고 있습니다.
저는 여기서 너무 조심스러워요, 하지만 이것을 단지 배우기 위해 사용하는 것입니다.
(이 게시물에 "보안" 태그를 지정하는 것이 좋습니다.)
먼저, 무엇으로부터 보호하고 있는지에 대해 명확히 해야 합니다.당신은 고객을 전혀 믿을 수 있습니까?교활한 사용자는 페이지에 그리스몽키 스크립트를 붙이고 UI가 요청을 보내기 위해 호출하는 코드를 정확히 호출할 수 있습니다.자바스크립트 폐쇄에서 모든 것을 숨기는 것은 디버거가 필요하다는 것을 의미할 뿐, 공격을 불가능하게 만들지는 않습니다.Firebug는 HTTPS 요청을 추적할 수 있습니다.손상된 클라이언트도 고려해 보십시오. 키로거가 설치되어 있습니까?공격자가 여유 시간에 언제든지 메모리의 어떤 부분을 검사할 수 있도록 전체 시스템이 비밀리에 실행되고 있습니까?웹 앱처럼 노출되는 보안은 정말 까다롭습니다.
그럼에도 불구하고 고려해야 할 몇 가지 사항은 다음과 같습니다.
실제로 키를 사용하는 것이 아니라 인증 즉시 제공하는 토큰과 같은 HMAC 해시를 사용하는 것을 고려합니다.
DOM 스토리지는 쿠키보다 조금 더 어려울 수 있습니다.
예를 들어 보안 모델에 대한 Google의 OAuth 2 구현을 살펴보겠습니다.기본적으로 제한된 시간 동안만 유효한 토큰을 사용합니다(단일 IP 주소에 대해서도 가능).이렇게 하면 토큰이 가로채거나 복제되더라도 짧은 시간 동안만 유효합니다.물론 토큰이 부족할 때 수행하는 작업에 주의해야 합니다. 공격자가 코드와 동일한 작업을 수행하여 유효한 새 토큰을 얻을 수 있습니까?
서버 측 보안을 소홀히 하지 마십시오. 클라이언트가 요청을 제출하기 전에 확인했어야 하는 경우에도 사용자가 실제로 요청한 작업을 수행할 수 있는 권한이 있는지 서버에서 다시 확인하십시오.사실, 이 조언은 위의 대부분을 없앨 수 있습니다.
API 키가 사용되는 방식에 따라 다릅니다.Google에서 제공하는 것과 같은 API 키는 요청을 생성하는 사이트의 URL에 연결되어 있습니다. 다른 URL을 사용하여 사이트에서 키를 사용하려고 하면 서비스가 느려지고 오류가 발생하므로 클라이언트 측에서 키를 보호할 필요가 없습니다.
그러나 일부 기본 API는 클라이언트에 연결되어 있고 여러 도메인에서 사용할 수 있으므로, 이전에는 이 API를 서버 사이드 코드로 래핑하고 클라이언트가 로컬 서비스와 통신하고 서비스를 보호하는 방법에 몇 가지 제한을 두는 관행을 고수했습니다.
그러나 전반적인 권장 사항은 키를 사용하는 방법에 대한 웹 API 제한을 적용하여 클라이언트에서 키를 보호하려는 복잡성과 필요성을 제거하는 것입니다.
jQuery를 사용하여 API와의 통신을 처리하는 서버 측 코드를 호출하는 것은 어떻습니까?MVC를 사용하는 경우 코드와 API 키가 포함된 컨트롤러 작업을 호출하여 서비스를 누르고 UX에 부분 보기(또는 JSON)를 반환할 수 있습니다.웹 양식을 사용하는 경우 뒤에 있는 코드에서 API 통신을 수행하고 UX가 사용할 응답 스트림에 콘텐츠를 작성하는 aspx 페이지를 만들 수 있습니다.그러면 UX 코드가 서버 측 코드에 대한 $.post() 또는 $.load() 호출을 포함할 수 있으며 API 키와 끝점이 모두 보호됩니다.
일반적으로 이러한 경우에는 브라우저에서 요청할 수 있는지 확인하는 'AJAX'를 사용하여 서버를 통해 요청을 프록시합니다.JavaScript에서 직접 서비스를 호출하려면 JSON 웹 토큰(JWT)과 같은 일종의 토큰 시스템이 필요하며 서비스가 현재 도메인이 아닌 다른 곳에 위치한 경우 도메인 간 문제를 해결해야 합니다.
자세한 내용은 http://blogs.msdn.com/b/rjacobs/archive/2010/06/14/how-to-do-api-key-verification-for-rest-services-in-net-4.aspx 을 참조하십시오(에서 REST 서비스에 대한 API 키 확인을 수행하는 방법).NET 4)
언급URL : https://stackoverflow.com/questions/6302341/web-services-api-keys-and-ajax-securing-the-key
'source' 카테고리의 다른 글
C/C++ int 또는 unsigned int 사용 (0) | 2023.07.25 |
---|---|
전후 캐치 위치 (0) | 2023.07.25 |
JavaScript의 KeyCode에서 문자 값 가져오기...그다음 다듬기 (0) | 2023.07.25 |
날짜가 유효한지 확인합니다. (0) | 2023.07.25 |
'root' 사용자에 대한 액세스가 거부되었습니다(암호 사용: 아니요). (0) | 2023.07.25 |