加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – ASP.NET MVC UpdateModel容易受到黑客攻击?

发布时间:2020-12-16 00:07:18 所属栏目:asp.Net 来源:网络整理
导读:我有一个类似日历的ASP.NET MVC应用程序.根据NerdDinner示例,我使用UpdateMethod()更新编辑页面的结果 在我的应用中,某些事件是完全可自定义的,某些事件只能部分自定义.即使用于编辑部分可自定义事件的编辑表单只有这些字段可用,显然有人可以使用缺少的数据
我有一个类似日历的ASP.NET MVC应用程序.根据NerdDinner示例,我使用UpdateMethod()更新编辑页面的结果

在我的应用中,某些事件是完全可自定义的,某些事件只能部分自定义.即使用于编辑部分可自定义事件的编辑表单只有这些字段可用,显然有人可以使用缺少的数据创建自己的表单并发布到我的站点.如果他们这样做,有什么可以阻止某人改变任何/所有领域?更糟糕的是,如果他们试图改变id(主键)怎么办?

感觉UpdateModel()容易受到非常基本的黑客攻击.我的恐惧是合法的还是我缺少的东西?

// POST: /MyEvents/Edit/2
[AcceptVerbs(HttpVerbs.Post),Authorize]
public ActionResult Edit(int id,FormCollection formValues)
{
    MyEvent myevent = eventRepository.GetMyEvent(id);

    try
    {
        UpdateModel(myevent);
        eventRepository.Save();
        return RedirectToAction("Details",new { id = myevent.MyEventId });
    }
    catch
    {
        ModelState.AddRuleViolations(myevent.GetRuleViolations());
        return View(new MyEventFormViewModel(myevent));
    }
}

解决方法

你错过了“模型绑定安全性”一节.您应该始终包含可以通过任何用户输入方法更新的属性白名单.

例如,来自NerdDinner:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create( [Bind(Include="Title,Address")] Dinner dinner)
{

}

或者,如果您正在调用UpdateModel,则可以创建允许属性的字符串数组,并执行此操作

UpdateModel(myObject,allowedProperties);

您可以自己锁定类,以便只有某些属性也可以更新.

[Bind(Include="MyProp1,MyProp2,MyProp3")]
public partial class MyEntity { }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读