c# - 拦截 ASP NET MVC POST 值

标签 c# asp.net-mvc asp.net-mvc-3 security

我最近的一个 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),但我通常不推荐这样做;太容易忘记了。

另请参阅:ASP.NET MVC - Alternative for [Bind(Exclude = "Id")]

关于c# - 拦截 ASP NET MVC POST 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14711091/

相关文章:

c# - 使用 Lambda 和 Func<> 的动态构造函数

c# - 使用对象或属性创建 View 模型

c# - 使用 HttpPost 将 IEnumerable 或列表模型传递给 Controller

c# - ASP.NET MVC3 : How to return raw html to view?

c# - 压缩包 : Entry name problems

c# - 如何在WP7应用程序中显示EULA?

c# - 如何验证 RadioButtonList 是否在 C# 中检查/选择它?

c# - 如何访问 MVC5 中 Kendo UI 网格内的 Entity Framework 域对象

asp.net-mvc - 为 dnx rc2 运行 MVC 6 ASP.NET 5 本地化示例

asp.net-mvc - Mvc验证正则表达式只验证数字?