2011-05-08 80 views
1

我懷疑這是由於我的測試配置,但我想問問你們的想法。我正在玩一個快速測試項目。我有一個簡單的表單身份驗證頁面和一個訂單頁面(兩個字段和一個顯示「訂單」的列表)。訂單頁面設置爲在檢索參數時使用Request.Form [],以防止輸入作爲GET操作進入。ViewStateUserKey無法阻止CSRF?

我在Page_Init中設置了ViewStateUserKey,並明確地將EnableViewStateMac設置爲true(即使它默認爲true)。

然後,我做了一個.HTM,它在我的訂單頁上做了一個表單發佈,爲兩個字段(產品和數量)設置了值。我應該注意到,我並沒有打算將視圖狀態作爲表單提交的一部分。我做了查看源代碼在瀏覽器中的實際頁面上,切出一切,但表單字段,添加了一些JavaScript來設置字段值,做我登錄到測試項目的form.submit()

,並開通.HTM。 .HTM成功提交了表單,當我刷新訂單頁面時,我可以看到僞造的訂單。

爲什麼ViewStateUserKey不能防止這種情況發生?難道它不應該阻止這種類型的攻擊嗎?在這個例子中,我沒有篡改視圖狀態,我只是做了一個頁面,做了一個正常的表單發佈,所以是ViewStateUserKey 只有有防止ViewState篡改(這打擊我完全毫無價值,或者這是工作,因爲兩頁生活在同一物理機上?

回答

1

是否包含在測試頁的原始ViewState字段?如果您複製特定用戶有效的視圖狀態,然後提交它作爲用戶,那麼,你希望它

ViewStateUserKey功能只會阻止您從您自己的用戶創建ViewState,並將其用於無意中由其他用戶進行的提交中使用ViewState。

+0

我的測試頁根本沒有viewstate。這是一個頁面,其中包含兩個控件,一個用於設置控件值和一個調用以提交表單的JavaScript。 – KindaConfused 2011-05-08 15:06:33

+0

我的測試頁面根本沒有viewstate。這是一個頁面,其中包含兩個HTML控件,一個表單和一些JavaScript,用於設置控件值和調用以提交表單。 那麼你的意思是,ViewStateUserKey + EnableViewStateMac將*僅*防止與視圖狀態篡改並不會阻礙:

因此就阻止的唯一方式: 1.加密的網絡連接 2.使用隱藏的表單字段的值,以確定爲合法的(和加密的,所以你不能窺探值) – KindaConfused 2011-05-08 15:16:30

+0

阿的要求,所以你根本沒有真正使用回傳和視圖狀態,只是簡單的舊HTML表單處理?在這種情況下,你必須自己動手。見例如https://www.owasp.org/index.php/.Net_CSRF_Guard爲一個庫實現這一點。 – bobince 2011-05-08 15:28:13