2011-10-31 8 views
2

jQuery ajax로 호출되는 웹 사이트에 대한 내부 API를 구현해야합니다. JSON에서 데이터를 반환합니다.API에 대한 외부 호출 차단 (보안)

캐치 : 동일한 웹 사이트에서 데이터를 호출 할 때만 데이터를 던져야합니다. 그것은 클라이언트 측에서 자바 스크립트와 함께 호출되기 때문에 IP가 작동하지 않을 것이라고 가정합니다.

예를 들어 다른 사용자가 json URL을 다른 도메인에서 호출하려고하면 오류 메시지가 표시됩니다.

아이디어가 있으십니까?

+1

긴 이야기 : 가능하지 않습니다. –

+0

인증이 없습니다 :(결과가있는 열린 양식입니다.) 페이지를 다시로드하지 않으려면 jQuery Ajax를 통해 수행하십시오. – andufo

+0

도메인을 확인하지 않는 이유는 무엇입니까? – elboletaire

답변

4

여기서 충분한 방법 중 하나는 사용자가 페이지를로드 할 때 백엔드에서 csrf 토큰 (비밀 키)을 제공하는 것입니다. 그런 다음 사용자가 서버의 웹 페이지를 사용하도록 Ajax 요청을 수행 할 때 해당 토큰을 전달하십시오. 적어도 Django에는 csrf 토큰에 대한 지원이 있습니다. 다른 프레임 워크에서도 마찬가지입니다.

참고 : 데이터/API 액세스가 더 안전하지는 않지만 다른 웹 사이트가 API에 액세스하는 것을 더 어렵게 만듭니다. 이것은 적절한 인증의 대안이 아닙니다.

링크 : 짧은

+1

이것은 공격자가 CSRF 토큰을 얻기 위해 페이지를 움켜 잡고 질의를 할 수 있기 때문에 완전히 도움이되지 않습니다. CSRF 토큰은 * 사용자에 대한 공격을 막는 것입니다 * 자신의 세션을 하이재킹하여 * API에 대한 액세스를 제한하지 않습니다. – derobert

+1

예,하지만 일부 유스 케이스에는 충분할 수 있습니다. 댓글에 언급 된 사람들처럼, au 없이는 완벽한 해결책이 없습니다. thentication. 적어도 이것은 사람들이 귀하의 API를 사용하여 매쉬업을하지 못하게합니다. – Lycha

+1

일부 유즈 케이스에서는 충분할 수도 있지만, 답변을 읽는 모든 사람들이 패배하는 것이 얼마나 쉬운 지 알고 있어야합니다. 그 무책임한 IMO는 알려진 (그리고 실질적인) 약점을 밝히지 않고 보안 권장 사항을 제공합니다. – derobert

관련 문제