2013-03-02 140 views
6

昨天,我讀了一些關於如何防止Json Hijacking with Asp.Net MVC的好文章。規則是:絕不會以get請求的形式發送json格式的合理數據。通過在谷歌上進行簡單搜索,您可以輕鬆地學習如何定義一個腳本,該腳本將用於通過其auth cookie的幫助從另一個用途提取數據。Json使用Ajax劫持Jquery post請求

但是在閱讀了所有這些文章之後,我不知道爲什麼使用Ajax Jquery post請求不能執行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>標記。但瀏覽器發送GET請求以檢索此腳本而不是POST。這就是爲什麼使用POST以JSON傳輸敏感信息更安全的原因。

+0

我看了這篇文章(http://stackoverflow.com/questions/3877309/submit-cross-domain-ajax-post-request),他說我可以跨域AJAX調用與POST請求,但我贏了沒有得到迴應。在任何情況下,如果我總是使用POST請求,那麼回答我就沒有可能與JSON相關的漏洞。 – Samuel 2013-03-02 13:43:35

+0

是否有可能通過調用$ .get而不是嘗試重新定義數組來實現json劫持?我在網上閱讀的所有文章都沒有提到使用jQuery來做Ajax查詢。 – Samuel 2013-03-22 12:26:25

+0

@Samuel:不,jQuery AJAX請求受[同源策略](http://en.wikipedia.org/wiki/Same-origin_policy)保護。包含'