正在截获ASP.NET MVC POST值

本文关键字:MVC POST NET ASP | 更新日期: 2023-09-27 17:57:39

我最近的一个MVC3项目被我的讲师入侵了,他不会告诉我他是如何做到的,直到几周后他向全班做了一次演讲。然而,我不能等这么久。

我的问题是,有没有一种方法可以拦截从视图发送到控制器POST方法的数据?如果是的话,这种方法是什么?我该如何阻止它?

例如:

将用户对象发布到数据库的注册页面。用户对象有一个布尔Admin,它被自动设置为false。黑客拦截帖子并将"用户管理"属性的值更改为true。

任何帮助都会很棒。

正在截获ASP.NET MVC POST值

对控制器(或任何HTTP处理程序)的请求没有任何特殊或受保护的地方。它只是一个名称/值对的字符串,可以随意更改。在VisualStudio调试器的即时窗口中查看Request.Form

您可以使用像Firefox tamper data插件这样的工具来篡改表单数据。即使没有使用几行代码的工具,修改也很简单。你甚至不需要一个网络浏览器就可以做到这一点

我猜你的讲师只是把POST从IsAdmin=false改成了IsAdmin=true

那么我们该如何防止这种情况呢?

  • 验证所有输入。POST/view模型显示IsAdmin=true?好的,打电话的人有权利做那个任务吗?

  • 创建视图模型,该模型不公开您不希望更改的属性即使某个属性没有显示在页面上,如果它在请求中,ModelBinder也会绑定它这意味着,即使您没有在页面上放置IsAdmin复选框,如果视图模型包含IsAdmin属性,也可以对其进行设置。

  • 您可以选择性地将模型的属性标记为不可绑定,但我通常不建议这样做;太容易忘记了。

另请参见:ASP。NET MVC-〔Bind(Exclude="Id")〕的替代方案

Aaron说了什么。没有什么是可以信任的。一切都必须检查。如果"admin"的唯一决定因素是传入的布尔值,那么您将需要更多的安全性,例如令牌或在更新/检查数据时可以在数据库中进行双重检查的东西。