在ASP.NET MVC(默认路由)中,我想使用这样的URL来返回带有表单的View来编辑客户:
/Customers/Edit/5
Run Code Online (Sandbox Code Playgroud)
我需要使用CustomerId=5
,但我不想允许客户更改它.现在我使用以下方法隐藏ID:
<%= Html.Hidden("CustomerId") %>
Run Code Online (Sandbox Code Playgroud)
这实现了我想要的,但我的印象是隐藏的表单变量不安全并且可以由最终用户操纵.
那么,允许客户编辑信息而不是他们的ID的最佳方法是什么?
roy*_*yco 13
我的解决方案是使用Steven Sanderson的ASP.NET MVC书籍中的Tamper Proofing代码.这个想法是你创建一个你想要防篡改的隐藏表单字段的哈希:
<%= Html.Hidden("CustomerId") %>
<%= Html.Hidden("CustomerIdHash") %>
Run Code Online (Sandbox Code Playgroud)
提交表单后,Steven的代码会计算CustomerId的另一个哈希,并确保它等于CustomerIdHash.如果是,则不会发生篡改.这是伟大的代码,值得这本书的价格.
Dmi*_*ets 10
在显示相应视图之前,请检查控制器操作(/ Customers/Edit)中的权限.请注意,此处的问题根本不在于您的隐藏字段:用户只需在其浏览器中键入" http://yoursite.com/Customers/Edit/10 "即可.因此,无论他如何调用该操作,您都必须检查您的操作是否真的允许用户编辑所请求客户的详细信息.
归档时间: |
|
查看次数: |
10814 次 |
最近记录: |