2011-09-30 69 views
2

是否有任何框架內的方式來防止基於ASP .NET 4.0 Web表單的網站(而不是MVC)中的跨站點請求僞造(CSRF)?我看到框架生成__EVENTVALIDATION和__VIEWSTATE隱藏的表單字段,我已經通過machineKey和viewStateEncryptionMode =「Always」在我的web.config中加密了它們。但是,他們是否能夠實際防止CSRF攻擊尚不清楚。我測試了一個交叉發佈(通過表單的asp:Button中的PostBackUrl),我修改了__VIEWSTATE,__EVENTVALIDATION和__PREVIOUSPAGE(額外的交叉帖子)隱藏的加密表單字段,其他敏感表單字段仍然到達了我的代碼隱藏處理塊。我期待框架檢測修改後的加密字段並拋出錯誤。僅供參考,我將aspx保存爲.html,更改了這些隱藏的表單字段並重新使用了表單(現在放在.html中)來模擬攻擊者。所以我仍然可以發佈到我的敏感表單/字段,因爲(開始推測).html文件不通過ASP.NET處理引擎? (/結束猜測)任何防止跨站點請求僞造(CSRF)在ASP .NET 4.0(而不是MVC)內的框架內方式?

如果沒有這樣的框架內機制存在,是否有任何代碼片段快速原型/使用?我可以通過哈希用戶標識,甚至爲該c#變量設置一個表單隱藏變量,輕鬆創建每個用戶的唯一標識。但

  • 的ASP.NET 4.0力學還設置,C#語言變量作爲一個cookie

  • 檢查如果cookie值==在後續請求的形式值(有效性)

對我不清楚。

回答

1

我不知道如何在框架中做到這一點,但你可以自己做比你的帖子建議更容易。

您不需要設置cookie值。它只是如何將mvc框架作爲一種優化來讓服務器成爲無狀態的。所有你需要做的是挑選一些隨機(對攻擊者)值,並將其添加爲表單中的隱藏字段。當您獲取數據時,請驗證該值是否在表單中。不要只散列用戶標識,散列用戶標識和一些祕密隨機值。這樣,如果攻擊者知道用戶標識,則無法計算隱藏值。

由於相同的來源策略阻止attacker.com讀取您網站的標記,因此它們無法讀取隱藏值。因此,他們製作的CSRF帖子,同時擁有你的cookie(因此也是視圖狀態),不會有這個價值。

+0

明白了。 salt,nonce或除了用戶ID之外的內容來生成進入隱藏表單字段的散列/簽名。謝謝。 – DeepSpace101

相關問題