如果我的ChangePassword表單中包含用戶的隱藏ID字段,該怎麼辦?防止隱藏字段的變更
BadPerson知道GoodPerson的身份。他使用FireBug打開更改密碼錶單,將其ID更改爲GoodPerson的ID,以便GoodPerson更改密碼。
當然,我可以創造一些服務器邏輯,以防止這一點,但我覺得應該有一些開箱即用解決方案,拋出至極如果隱藏字段已經改變,至極我也不知道。
提前致謝。
編輯 好吧,更改密碼是一個壞榜樣。任何在隱藏字段中有id的編輯表單都有同樣的問題。
如果我的ChangePassword表單中包含用戶的隱藏ID字段,該怎麼辦?防止隱藏字段的變更
BadPerson知道GoodPerson的身份。他使用FireBug打開更改密碼錶單,將其ID更改爲GoodPerson的ID,以便GoodPerson更改密碼。
當然,我可以創造一些服務器邏輯,以防止這一點,但我覺得應該有一些開箱即用解決方案,拋出至極如果隱藏字段已經改變,至極我也不知道。
提前致謝。
編輯 好吧,更改密碼是一個壞榜樣。任何在隱藏字段中有id的編輯表單都有同樣的問題。
沒有什麼,會讓你知道,一個隱藏字段的值的值已經改變與否。對於用戶更改密碼,這意味着他需要進行身份驗證。使用表單身份驗證時,當前已通過身份驗證的用戶的ID存儲在不可修改的加密cookie中。
這是說,你不應該用來存儲當前連接的用戶隱藏字段。只需使用內置的FormsAuthentication mechanism in ASP.NET,並且絕不將這些信息存儲在隱藏字段中。 ASP.NET知道cookie的價值沒有被篡改的方式是用配置中指定的machineKey對其進行簽名。
有安全和認證打交道時,你應該遵循的一個重要原則:始終使用內置的安全機制,從來沒有推出自己。
我同意Darin表單身份驗證會照顧上面提到的特定問題(更改密碼)。此答案適用於確保隱藏字段的值不會更改的更一般問題。
這個最好的解決辦法是,包括其中包含的第一個隱藏字段的值的散列另一個隱藏字段。這樣,如果第一個隱藏字段被更改,您將會知道它。生成的HTML看起來是這樣的:
<input id="productId" name="productId" type="hidden" value="1" />
<input id="productId_sha1" name="productId_sha1" type="hidden" value="vMrgoclb/K+6EQ+6FK9K69V2vkQ=" />
This article展示瞭如何做到這一點,包括延期Html.SecuredHiddenField
這會照顧邏輯,爲你的源代碼。
正確的鏈接是:http://blog.slatner。COM /令人討厭/固定形式的值,在-ASP淨mvc.html。 謝謝 – 2016-08-16 13:50:40
我會第二個,不要嘗試自己做,使用表單身份驗證,它會照顧你所有的。 – Doobi 2010-05-15 13:23:26
我還想補充一點,當允許用戶更改密碼時,讓他們輸入當前密碼以及新密碼通常是一個好主意。這提供了一個額外的驗證點,您可以執行。 – BradBrening 2010-05-15 13:24:55
好吧,但如果它不是一個用戶,而是一些其他的對象,那麼存儲它的id就非常方便。 >沒有什麼,會讓你知道,一個隱藏字段的值的值已更改或不 我不同意這種說法。好的舊viewstate可以:)應該有我相信的東西。否則,在安全方面有一個巨大的漏洞。 – 2010-05-15 13:26:33