我最近的一个 MVC3 项目被我的讲师破解了,他不会告诉我他是如何做到的,直到他在几周后向全类做演示。但是我不能等这么久。
我的问题是,有没有办法拦截从 View 发送到 Controller POST 方法的数据?如果是这样的话,这种方法叫什么?我该如何阻止它?
例如:
将用户对象发布到数据库的注册页面。 用户对象有一个自动设置为 false 的 bool 值 Admin。 黑客拦截 Post 并将 Users Admin 属性的值更改为 true。
任何帮助都会很棒。
最佳答案
向 Controller (或任何 HTTP 处理程序)发出的请求没有什么特别或 protected 。它只是一串可以随意更改的名称/值对。在 Visual Studio 调试器的即时窗口中查看 Request.Form
。
您可以使用 Firefox Tamper Data 等工具篡改表单数据插入。即使没有工具使用几行代码修改也是微不足道的。您甚至不需要 Web 浏览器即可执行此操作。
我猜你的讲师只是将 POST 从 IsAdmin=false
更改为 IsAdmin=true
那么我们该如何预防呢?
验证所有输入。 POST/ View 模型说 IsAdmin=true?好的,调用者是否有权进行该分配?
创建不公开您不想更改的属性的 View 模型。 即使属性没有显示在页面上,如果它在请求中,ModelBinder 也会绑定(bind)它。这意味着即使您没有放置
IsAdmin
如果 View 模型包含 IsAdmin 属性,则可以设置页面上的复选框。您可以有选择地将模型的属性标记为不可绑定(bind),但我通常不推荐这样做;太容易忘记了。
关于c# - 拦截 ASP NET MVC POST 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14711091/