1

這篇文章描述了一個tokening系統爲所有JSON HTTPGET和HttpPost AJAX調用:AJAX XSS攻擊和.Net MVC

總之,您使用AntiForgeryToken屬性在頁面上創建一個令牌,然後手動驗證該值通過AJAX調用返回給控制器。

http://www.asp.net/web-api/overview/security/preventing-cross-site-request-forgery-(csrf)-attacks

後互聯網偵探的時間,總會有這種可能性的參考,但沒有人真正實現它。相反,通常重複的技術是1)僅使用HttpPost AJAX請求(打破REST),2)將所有json響應封裝在匿名對象中,這會導致.net MVC4中顯着不雅的代碼,3)使用不可解析的cruf,常見的庫,如backbone.js

那麼,爲什麼我們不都使用上面鏈接的令牌系統?我錯過了什麼?

+1

是什麼讓你覺得「沒有人實際實現它」?我當然這樣做,還有其他我知道的。我認爲你有一個錯誤的前提。此外,您的鏈接不起作用。此外,這不是關於通用XSS,這特別是關於CSRF – 2013-04-24 03:16:37

回答

2

如果您擔心CSRF,並且擔心REST和正確執行REST,那麼您應該不會對受CSRF影響的GET做任何事情,因爲AntiForgeryTokens的整個目的是處理不斷變化的數據(即,如果沒有首先獲取包含令牌的頁面,則無法使用AntiForgeryToken)。

因此,說使用POST「打破REST」似乎是誤解你首先使用的令牌。確實,GET可以暴露敏感信息,但是如果你想使用GET來獲取令牌,你必須有一些方法。

Ajax和AntiForgeryToken與json和Ajax的真正問題是,「內置」驗證只適用於表單值,而不是json。所以你必須自己做驗證,並且你鏈接的那篇文章給出瞭如何做到這一點的一個很好的解釋。

+0

假設我有一個以交互方式顯示用戶財務數據的網頁。從我的角度來看,該過程將是: 1)用戶登錄到頁面已被驗證的W /防僞和鑑別屬性 2)JS腳本收集用戶的喜好,並提交一個HTTPGET來獲取數據。 JS然後構建頁面。 現在我們有一個公共行爲,它通過Json通過Get來響應,這可能會受到XSS攻擊的影響。在這個scenerio中使用POST會破壞REST,不是嗎?並且在鏈接中使用該方法可以解決問題,對嗎? – 2013-04-24 15:28:52

+0

@RobertChrist - 您無法真正「登錄到已經通過防僞標記驗證的頁面」,因爲您無法從瀏覽器獲取獲取令牌(當您將url輸入到地址欄中時,或者單擊一個不作爲ajax執行的鏈接),除非你在URL上做了這個,這是不明智的。即使如此,您需要先獲取令牌,才能在服務器上驗證令牌。 – 2013-04-24 15:33:43

+0

我剛完成編輯之前的評論,對不起。 – 2013-04-24 15:35:06