In regards to this Haacked blog,我很猶豫,因爲在HTTP GET使用MVC3的AntiForgeryToken避免使用Javascript CSRF漏洞
推薦的解決方案,以實現所提出的反JSON GET劫持的解決方案,以減輕JSON劫持涉及非REST-充分JSON POST到GET數據
備用溶液(對象包裹)導致與第三方控制I不必源代碼訪問問題。
我找不到社區審查的實施方案,該方案實施了替代解決方案(如下所示),以瞭解如何編寫安全令牌或在網頁中安全傳遞安全令牌。我也不會聲稱是足夠的專家來推出我自己的實施。
來源標題不能在
背景
This blog介紹了有關JSON劫持CSRF問題的依據,並建議使用JSON的POST獲取數據。由於使用HTTP POST獲取數據不是很REST類型的,我會尋找一個更REST類型的解決方案,使每個會話,或每頁REST動作。
另一個減輕技術是在對象as described here包裝JSON數據。恐怕這可能會延遲這個問題,直到找到另一種技術。
替代實施
對我來說,他很自然地延長使用ASP.NET MVC's AntiForgeryToken使用jQuery HTTP獲取我的JSON。
例如,如果我得到一些敏感的數據,根據上述Haacked鏈路,下面的代碼是脆弱:
$.getJSON('[url]', { [parameters] }, function(json) {
// callback function code
});
我同意它不向REST類型GET使用推薦的解決方法POST數據。我的想法是在URL中發送驗證令牌。這樣CSRF風格的攻擊者就不會知道完整的URL。緩存或不緩存,他們將無法獲取數據。
下面是如何完成JSON GET查詢的兩個示例。我不確定什麼實現最有效,但可能會猜測第一個實現是從錯誤的代理緩存這些數據更安全的,因此容易受到攻擊者的攻擊。
http://localhost:54607/Home/AdminBalances/ENCODEDTOKEN-TOKEN-HERE
或
http://localhost:54607/Home/AdminBalances?ENCODEDTOKEN-TOKEN-HERE
...這很可能會成爲MVC3的AntiForgeryToken,或變體(see swt)上。此令牌將被設置爲任何URL格式上面所選上內嵌值。阻止我從我自己的滾動解決方案
樣題
什麼URL格式(上圖),你會用它來驗證JSON GET(斜槓,問號等)將代理到http://localhost:54607/Home/AdminBalances迴應有http://localhost:54607/Home/AdminBalances?ENCODEDTOKEN-TOKEN-HERE的數據?
如何將該編碼的標記傳遞到網頁?內聯,或作爲頁面變量?
你會如何撰寫該令牌?建在AntiforgeryToken,或通過其他方式?
AntiForgeryToken使用cookie。在這種情況下會使用/需要支持cookie嗎?僅限HTTP? SSL與HTTP Only結合如何?
你會如何設置你的緩存頭?任何特殊的谷歌網絡加速器(例如)
只是使JSON請求SSL的含義是什麼?
爲了安全起見,返回的JSON數組是否應該被包裝在一個對象中?
這將如何互操作的解決方案與微軟的提議templating and databinding功能
的問題,以上是我不往前衝,這樣做我自己的原因。更不用說可能有更多的問題我沒有想到,但是卻是一種風險。
這只是CSRF的變體。 – SLaks 2011-02-06 17:52:26