【发布时间】:2015-08-10 05:35:23
【问题描述】:
我有一种方法可以接收两个参数(int?,字符串)。我的控制器中的操作必须保存此变量并返回带有表单的视图。从客户端返回表单后,我需要之前请求中的这些变量。我可以将它们传递给 ViewBag 查看并添加到隐藏的表单中,但这非常危险,任何人都可以在浏览器中更改它。有什么想法吗?
我认为这个问题没有意义。
如果我有使用 HTTP GET 方法接收两个参数的方法,那么用户在 get 方法或表单中更改这两个变量没有区别。
如果我存储在服务器端,他可以在将参数传递给第一个方法时更改,服务器将存储错误的变量。
例如:
http://www.someurl.com/Controller/Action/?id=123&key=someKey
我可以通过编辑url来更改参数,所以很荒谬的存储它作为服务器端的变量,以确保用户不会通过编辑隐藏字段来更改它。此外,我可以检查密钥是否与具有此 ID 的数据库中的密钥相同。
【问题讨论】:
-
是的,恶意用户可以使用 fiddler 等工具来更改隐藏输入的值。
-
那为什么不使用会话呢?
-
会话时间为 20 或 30 分钟。用户可以在会话时间结束时打开此表单并提交。用户不喜欢例外。
-
你在变量中存储了什么会很危险的改变?
-
Key 和 id 将用于验证请求并在数据库中进行一些更改。
标签: asp.net-mvc var httpcontext viewbag