拦截ASP NET MVC POST值

dor*_*e01 3 c# security asp.net-mvc asp.net-mvc-3

我的讲师入侵了我的一个最近的MVC3项目,直到他在几周内向全班作介绍之前,他不会告诉我他是如何做到的。但是,我等不了那么久了。

我的问题是,有没有办法拦截从View发送到Controllers POST方法的数据?如果是这样,此方法称为什么,如何停止?

例如:

将用户对象发布到数据库的注册页面。用户对象的布尔值Admin会自动设置为false。黑客拦截Post,并将Users Admin属性的值更改为true。

任何帮助都会很棒。

Tim*_*ora 5

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

您可以使用Firefox Tamper Data插件之类的工具来篡改表单数据。即使没有使用几行代码的工具进行修改,也很容易。您甚至不需要网络浏览器即可。

我的猜测是您的讲师只是将POST从更改IsAdmin=falseIsAdmin=true

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

  • 验证所有输入。POST /视图模型显示IsAdmin = true?好的,呼叫者有权进行分配吗?

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

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

另请参阅:ASP.NET MVC-[Bind(Exclude =“ Id”)]的替代方法