C# 拦截ASP NET MVC POST值

C# 拦截ASP NET MVC POST值,c#,asp.net-mvc,asp.net-mvc-3,security,C#,Asp.net Mvc,Asp.net Mvc 3,Security,我最近的一个MVC3项目被我的讲师入侵了,他在几周后向全班做报告之前不会告诉我他是怎么做到的。但是我不能等这么久 我的问题是,有没有办法截获从视图发送到控制器POST方法的数据?如果是这样的话,这种方法被称为什么?我怎样才能阻止它 例如: 将用户对象发布到数据库的注册页。 用户对象有一个自动设置为false的布尔管理。 黑客截获帖子并将Users Admin属性的值更改为true 任何帮助都会很好。亚伦说的话。没有什么是可信的。一切都必须检查。如果“admin”的唯一决定因素是传入的布尔值,那么

我最近的一个MVC3项目被我的讲师入侵了,他在几周后向全班做报告之前不会告诉我他是怎么做到的。但是我不能等这么久

我的问题是,有没有办法截获从视图发送到控制器POST方法的数据?如果是这样的话,这种方法被称为什么?我怎样才能阻止它

例如:

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


任何帮助都会很好。

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

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

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

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

那么我们怎样才能防止这种情况呢

  • 验证所有输入。POST/view模型说IsAdmin=true?好的,打电话的人有权分配吗

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

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


另请参见:

你能发布你的控制器操作和用户模型吗?你说他“黑客”了你的网站。你能更具体地说明实际做了什么吗?我猜他要么使用暴力,要么使用跨站点脚本。post方法可以接受的任何内容都可以发送给它。因此,任何人都可以发布admin设置为true的新用户。您需要在post方法中手动将admin设置为false,除非您希望允许其为true的特定情况。