2016-10-13 62 views
1

我想澄清我不是安全專家,不是我是道德或黑帽黑客,或者與安全性領域有什麼關係,我知道在創建網頁時採取措施保護表單不受跨站點請求僞造「CSRF」的影響,但在某些情況下,可以使用包含輸入元素和按鈕或可點擊div的div元素來完成確切的工作。我是否應該使用針對CSRF的輸入來保護div

通常編碼剃刀頁面使用

@Html.Antiforgerytoken() 

裏面的形式聲明,將針對CSRF在ASP.NET被保護的形式

問題是什麼時候:是有用還是會努力使用包含輸入和按鈕來執行AJAX調用的給定div執行相同的過程?

回答

0

是的,客戶端解決方案根本無關緊要。 CSRF是一個服務器端漏洞,如果不受保護,對服務器狀態(數據,基本上,但也包括登錄,特權級別更改等)的任何調用都易受CSRF影響。

在AJAX請求中,您必須自己發送令牌。使用jQuery,您可以使用$.ajaxSetup()beforeSend鉤子來捕獲任何狀態鏈接請求並自動添加令牌(這通常適用於POST,但如果應用程序使用GET來更改內容,則它可以是PUT,DELETE,甚至GET) 。使用beforeSend的好處是你只需要做一次,不需要再記住它。這種情況下的令牌通常可以在@Html.AntiforgeryToken()的頁面中生成,JavaScript可以從那裏獲取。

稍微有點特殊的情況是當您發送json數據時(請求的內容類型爲application/json且它不是www-url編碼的)。標準屬性[ValidateAntiForgeryToken]不能從json獲取令牌(並且它也不能從請求頭獲取它,如果您決定這是傳遞它的最佳選擇)。在這種情況下,您可以實現自定義驗證屬性,但這很容易,您只需實現從何處獲取令牌,但對於實際驗證,仍然可以使用標準AntiForgery.Validate()方法。

+0

感謝很多很好的解釋,它是有道理的(y) – maces