我懷疑這是由於我的測試配置,但我想問問你們的想法。我正在玩一個快速測試項目。我有一個簡單的表單身份驗證頁面和一個訂單頁面(兩個字段和一個顯示「訂單」的列表)。訂單頁面設置爲在檢索參數時使用Request.Form [],以防止輸入作爲GET操作進入。ViewStateUserKey無法阻止CSRF?
我在Page_Init中設置了ViewStateUserKey,並明確地將EnableViewStateMac設置爲true(即使它默認爲true)。
然後,我做了一個.HTM,它在我的訂單頁上做了一個表單發佈,爲兩個字段(產品和數量)設置了值。我應該注意到,我並沒有打算將視圖狀態作爲表單提交的一部分。我做了查看源代碼在瀏覽器中的實際頁面上,切出一切,但表單字段,添加了一些JavaScript來設置字段值,做我登錄到測試項目的form.submit()
,並開通.HTM。 .HTM成功提交了表單,當我刷新訂單頁面時,我可以看到僞造的訂單。
爲什麼ViewStateUserKey不能防止這種情況發生?難道它不應該阻止這種類型的攻擊嗎?在這個例子中,我沒有篡改視圖狀態,我只是做了一個頁面,做了一個正常的表單發佈,所以是ViewStateUserKey 只有有防止ViewState篡改(這打擊我完全毫無價值,或者這是工作,因爲兩頁生活在同一物理機上?
我的測試頁根本沒有viewstate。這是一個頁面,其中包含兩個控件,一個用於設置控件值和一個調用以提交表單的JavaScript。 – KindaConfused 2011-05-08 15:06:33
我的測試頁面根本沒有viewstate。這是一個頁面,其中包含兩個HTML控件,一個表單和一些JavaScript,用於設置控件值和調用以提交表單。 那麼你的意思是,ViewStateUserKey + EnableViewStateMac將*僅*防止與視圖狀態篡改並不會阻礙:
因此就阻止的唯一方式: 1.加密的網絡連接 2.使用隱藏的表單字段的值,以確定爲合法的(和加密的,所以你不能窺探值) – KindaConfused 2011-05-08 15:16:30阿的要求,所以你根本沒有真正使用回傳和視圖狀態,只是簡單的舊HTML表單處理?在這種情況下,你必須自己動手。見例如https://www.owasp.org/index.php/.Net_CSRF_Guard爲一個庫實現這一點。 – bobince 2011-05-08 15:28:13