当前位置:  开发笔记 > 编程语言 > 正文

在模型绑定期间,如何在ASP.MVC中检测到过度发布攻击?

如何解决《在模型绑定期间,如何在ASP.MVC中检测到过度发布攻击?》经验,为你挑选了1个好方法。

我想确定用户是否正在尝试在Asp.NET MVC中进行过度发布攻击。

如何确定某人是否正在向控制器发送特殊值(例如,通过Fiddler)?

请注意下面的“绑定”属性

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "LastName, FirstMidName, EnrollmentDate")]Student student)
{
    try
    {
        if (ModelState.IsValid)
        {
            db.Students.Add(student);
            db.SaveChanges();
            return RedirectToAction("Index");
        }
    }
    catch (DataException /* dex */)
    {
        //Log the error (uncomment dex variable name and add a line here to write a log.
        ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists see your system administrator.");
    }
    return View(student);
}

Bind属性是一种防止在创建方案中过度发布的方法。例如,假设Student实体包含一个您不想设置此网页的Secret属性。

   public class Student
   {
      public int ID { get; set; }
      public string LastName { get; set; }
      public string FirstMidName { get; set; }
      public DateTime EnrollmentDate { get; set; }
      public string Secret { get; set; }

      public virtual ICollection Enrollments { get; set; }
   }

即使网页上没有Secret字段,黑客也可以使用诸如Fiddler之类的工具或编写一些JavaScript来发布Secret表单值。如果没有Bind属性限制模型绑定器在创建Student实例时使用的字段,则模型绑定器将选择该Secret表单值并将其用于创建Student实体实例。然后,黑客为“秘密表格”字段指定的任何值都将在您的数据库中更新。下图显示了提琴手工具,该工具将Secret字段(值为“ OverPost”)添加到发布的表单值中。

Darin Dimitr.. 5

如果您使用视图模型,那么对于您来说,过高张贴将不是问题,也不是您应关注的事情。这样做的原因是,您将仅包括应该来自视图模型中用户输入的属性。然后,您将从数据库中获取实际实体,并将两者合并。这样,实体的所有明智属性将保持不变。因此,作为一条经验法则:始终在ASP.NET MVC应用程序中使用视图模型-应该用于修改服务器上某些状态的所有POST控制器操作都应采用视图模型,而不是实体模型。

因此,与其尝试确定某人是否试图过度使用一些他不应该修改的值,不如通过允许他仅修改他应该修改的值(通过在视图模型中公开它们)来禁止这样做。



1> Darin Dimitr..:

如果您使用视图模型,那么对于您来说,过高张贴将不是问题,也不是您应关注的事情。这样做的原因是,您将仅包括应该来自视图模型中用户输入的属性。然后,您将从数据库中获取实际实体,并将两者合并。这样,实体的所有明智属性将保持不变。因此,作为一条经验法则:始终在ASP.NET MVC应用程序中使用视图模型-应该用于修改服务器上某些状态的所有POST控制器操作都应采用视图模型,而不是实体模型。

因此,与其尝试确定某人是否试图过度使用一些他不应该修改的值,不如通过允许他仅修改他应该修改的值(通过在视图模型中公开它们)来禁止这样做。

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有