簡體   English   中英

如何在MVC中忽略查詢字符串中的模型綁定

[英]How to ignore model binding from querystring in MVC

我有表單提交做回發。 控制器動作接受這些值作為參數。 例如:EditProduct(int productid,字符串productname)。

productid由表單的隱藏字段提供。 我如何確保用戶不會調用此操作並將此產品ID和名稱作為queystring傳遞,並且模型綁定將綁定值並將產品保存在數據庫中?

我發現最安全的方法是檢查用戶是否有權編輯產品。 在執行操作中的任何數據庫更新之前,請選中此復選框,並且無需擔心用戶會修改隱藏值。

如果要強制用戶轉到您的網頁來執行帖子,則可以使用Html.AntiForgeryToekn() 但是,用戶仍然可以訪問該網站,查看防偽令牌並將其與他們的請求一起傳遞。

您可以在服務器上使用密鑰對產品ID進行簽名(使用HMACSHA512),然后在回發中驗證簽名。

您可能希望在簽名時包括當前日期和/或用戶或會話ID,以防止重放攻擊。

您應該在EditProducts操作中實施適當的訪問控制,以便嘗試編輯其他產品將產生錯誤。

試圖阻止用戶修改查詢字符串將無濟於事

我建議您在模型中添加一個rowversion(時間戳)列。 (如果可以對模型進行更改)這比簽名或哈希操作容易得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM