2013-03-02 3 views
6

어제, 나는 Json Hijacking with Asp.Net MVC을 방지하는 방법에 대한 멋진 기사를 읽었습니다. 규칙은 get 요청을 통해 json 형식으로 의미있는 데이터를 보내지 않습니다. Google에서 간단한 검색을 사용하면 인증 쿠키를 사용하여 다른 용도로 데이터를 추출하는 데 사용할 스크립트를 정의하는 방법을 쉽게 배울 수 있습니다.Ajax Jquery로 Json 하이재킹 게시물 요청

하지만이 모든 기사를 읽은 후 Ajax Jquery 게시 요청을 통해 Json 하이재킹을 수행 할 수없는 이유를 알 수 없습니다. 나는 Ajax 요청이 동일한 출처 정책에 종속되지만 JQuery에는 도메인 간 요청을 수행 할 수있는 속성이 있다는 것을 알았다.

이 경우 문서 준비 이벤트에서 $ .postJSON을 사용하여 스크립트로 Json 하이재킹을 수행 할 수 있습니까? 예 또는 아니오 인 경우, 정확하게 이유를 설명해 주시겠습니까?

여기에 내가 생각하고 일을하는 코드의 간단한 무리입니다

$.postJSON = function (url, data, callback) { 
    $.post(url, data, callback, "json"); 
}; 

<script> 
    $(function(){ 
     $.postJSON("/VulnerableSite/ControllerName/ActionName", 
     { some data parameters }, function() { 
     // Code here to send to the bad guy the data of the hacked user. 
     } 
    }); 
</script> 

가 대단히 감사합니다.

답변

8

하지만 JQuery에는 도메인 간 요청을 수행 할 수있는 속성이 있습니다.

네,하지만 GET 요청에서만 작동합니다. POST 요청으로 교차 도메인 AJAX 호출을 할 수 없습니다. 또한 최신 브라우저는 이미 __defineSetter__ 메소드를 덮어 쓸 가능성을 수정했습니다. 이 공격의 아이디어는 악의적 인 사이트에서 귀하의 웹 사이트를 가리키는 <script> 태그를 포함하는 것에 의존합니다. 그러나 브라우저는 POST가 아니라이 스크립트를 검색하기 위해 GET 요청을 보냅니다. 따라서 POST를 사용하여 중요한 정보를 JSON으로 전송하는 것이 더 안전합니다.

+0

나는이 게시물 (http://stackoverflow.com/questions/3877309/submit-cross-domain-ajax-post-request)에서 읽고 그는 POST 요청으로 크로스 도메인 AJAX 호출을 할 수 있다고 말했지만 나는 응답을받지 못했습니다. 어떤 식 으로든, 나는 POST 요청을 항상 사용한다면 JSON과 관련된 취약점이 없다고 대답했다. – Samuel

+0

배열을 다시 정의하는 대신 $ .get을 호출하여 json 하이재킹을 수행 할 수 있습니까? 그물에서 읽은 모든 기사는 아약스로 get 질의를하는 jquery의 사용에 대해서는 언급하지 않습니다. – Samuel

+0

@Samuel : 아니요, jQuery AJAX 요청은 [동일 출처 정책] (http://en.wikipedia.org/wiki/Same-origin_policy)에 의해 보호됩니다. '