JSONP는 안전한가요?
JSONP를 사용할 때 고려해야 할 보안 문제가 있습니까?
업데이트: JSONP는 교차 도메인 요청을 수행하기 위한 일반적인 해킹입니다.현재 최신 브라우저에는 Cross Origin Resource Sharing이 있으며 IE8+에는 이와 유사한 XDomainRequest가 있습니다.상세한 것에 대하여는, http://enable-cors.org/ 를 참조해 주세요.
JSONP는 콜백을 사용할 수 있는 스크립트입니다.단, 크로스 사이트 요구 위조(CSRF)에 주의해 주십시오.
스크립트와 서버를 제어하는 한 JSONP는 스크립트에 포함된 것보다 안전하지 않습니다.로그인 사용자에게 중요한 데이터를 반환하는 JSONP 서비스가 없는 한.악의적인 사이트는 서비스에 요청을 전송하고(사용자가 사이트에 로그인하고 있는지 확인) 데이터를 검색할 수 있습니다.이 서비스는 요청의 레퍼러를 확인할 수 있지만 플래시를 사용하여 레퍼러를 스푸핑할 수 있습니다(Chris Moschini에게 감사).
이 세나리오를 상상해 보세요.-사용자가 자신의 인터넷 뱅킹 계정에 로그인합니다.사용자 브라우저에 세션쿠키 저장이 사이트에는 사용자 및 계정에 대한 중요한 정보가 포함된 jsonp 서비스가 있습니다.- 다른 사이트에서는 사용자가 로그인한 것을 인식하지 못하지만 추측을 통해 jsonp 서비스에 접속하려고 할 수 있습니다.사용자가 세션 쿠키를 가지고 있기 때문에 브라우저는 응답을 얻을 수 있으며, 중요한 데이터를 서버에 저장하기 위해 사이트에서 Ajax 포스트를 실행하는 것을 막을 수 없습니다.
2012년 6월 28일 갱신:CSRF 공격으로부터 보호하려면 보안 전문가의 블로그 투고를 자세히 읽어보십시오. http://erlend.oftedal.no/blog/?subsid=130
네, 주의가 필요하지만 신뢰할 수 있는 서비스와 함께 적절하게 사용하면 비교적 안전합니다.
다음은 JSONP의 보안 문제에 대한 요약입니다.
소비자의 관점에서 보면:
- 지정한 JSONP 콜백으로 랩된 예상 JSON 대신 악의적인 JavaScript를 반환하지 않도록 공급자를 신뢰해야 합니다.
- Google Analytics와 같은 타사 JavaScript 내장 애드온도 마찬가지입니다.
- 서드파티가 임의의 JavaScript를 어플리케이션에서 실행할 수 있다는 점에서 XSS 공격과 유사할 뿐이지만 우선 요청을 함으로써 해당 서드파티를 신뢰하도록 선택해야 합니다.
프로바이더의 관점:
- 요청에 클라이언트의 cookie가 있더라도 소비자가 자신의 관리 하에 있는 웹 페이지라고 가정해서는 안 됩니다.Referer 헤더를 인증된 URL의 화이트리스트에 대해 확인하거나 쿠키 기반 인증에 의존하지 마십시오.
- CSRF / 혼란스러운 대리 공격과 유사합니다.
양측 모두에게 보안 문제가 있습니다.가장 심각한 것은 JSONP를 포함한 사이트입니다.
(제어하지 않는) 다른 도메인의 를 포함할 경우 해당 도메인은 언제든지 스크립트를 변경할 수 있습니다.웹페이지에서 Javascript가 할 수 있는 모든 작업을 Javascript에서 수행할 수 있습니다.JSONP를 사용하면 이 문제를 해결할 방법이 없습니다.iframe을 사용한 도메인 간 통신을 검토해야 합니다.이것은 뛰어난 EasyDXM 라이브러리에 의해 가장 잘 이루어집니다.
JSONP를 처리하는 웹 서비스를 제공하는 경우 Cross-Site Request Formature(CSRF; 사이트 간 요청 위조)로부터 보호해야 합니다.여기서 웹 서비스는 로그인한 사용자에게 중요한 정보를 반환합니다.사용자가 사이트에 로그인한 경우 다른 사이트에서 JSONP 서비스에 대한 GET 요청을 생성할 수 있으며, 도메인 쿠키가 요청과 함께 전송됩니다(기본적으로 로그인한 사용자 인증). 단, 이제 원격 도메인이 응답을 받아 중요한 데이터를 읽을 수 있습니다.
CSRF로부터 보호하는 가장 좋은 방법은 난스(추측하기 어려운 랜덤으로 생성된 번호)를 생성하여 세션에 저장하는 것입니다.이 난스를 웹 페이지의 모든 양식에 출력하고 페이지의 모든 JSONP 요청에 포함하십시오.서버에서 난스가 존재하며 요청에 올바른지 확인합니다(GET, POST 등).다른 도메인은 이 난스를 추측할 수 없기 때문에 쿠키가 전송되더라도 중요한 정보를 얻을 수 없습니다.
마지막으로 다른 종류의 보안 문제가 있습니다.JSONP는 OAuth에서 가능한 종류의 브라우저에서의 사용자 인증을 지원하지 않습니다.물론 서버에 OAuth와 같은 액세스 토큰을 가져와 사용할 수 있습니다.다만, 브라우저만으로 인증을 실시하려면 , iFrames 와의 크로스 도메인 통신을 사용할 필요가 있습니다.OAuth 2.0은 이렇게 하는 것 같아요.설정하는 방법은 다음과 같습니다.사이트에서 호스트되는 페이지는 서버에 대한 완전한 액세스 권한을 가집니다.EasyDXM을 로드하고 이를 사용하여 사이트에 숨겨진 iframe을 설정하고 이를 사용하여 대화합니다.
JSONP는 JavaScript처럼 도메인 간에 실행되는 모든 것을 실행할 뿐이기 때문에 안전하지 않습니다.
솔루션! 솔루션!
iframe(가능하면 샌드박스)을 생성하여 JSONP를 로드합니다.결과를 파악하여 다음 방법으로 전달합니다.window.postMessage
네, 평소처럼 누군가가 먼저 아이디어를 냈습니다.
블로그 투고는 없습니다만, 이 링크는 신용을 위해 보관하고 있습니다.http://beebole.com/blog/general/sandbox-your-cross-domain-jsonp-to-improve-mashup-security/
편집: 웨이백머신 링크
iframe 통신에는 window.name 해킹을 사용했지만 IE6 및 7용이었습니다.
언급URL : https://stackoverflow.com/questions/613962/is-jsonp-safe-to-use
'programing' 카테고리의 다른 글
각도를 수동으로 트리거하는 방법폼 태그 외부에 있는 버튼에서 JS 유효성 검사를 수행하시겠습니까? (0) | 2023.03.31 |
---|---|
Python의 문자열에서 사전으로 (0) | 2023.03.31 |
워드프레스 검색 기능으로 게시물만 검색 (0) | 2023.03.31 |
필수 필드의 ngMessage를 더티 또는 폼 전송 시에만 표시하려면 어떻게 해야 합니까? (0) | 2023.03.31 |
각도 응용 프로그램 시작 시 코드 실행 (0) | 2023.03.15 |