【问题标题】:CWE-ID 100 Fix for MVC5MVC5 的 CWE-ID 100 修复
【发布时间】:2017-11-09 02:44:28
【问题描述】:

根据 Veracode,与技术特定的输入验证问题相关的 CWE-ID 100“缺陷”被多次检测到我们的应用程序。

根据他们的文档,补救措施是在使用模型之前检查模型上的 ModelState.IsValid 属性。我们在每个控制器操作上都这样做,但我们仍然很糟糕。下面是一个示例控制器操作。

public async Task<ActionResult> DeliverySummary (ReportsViewModel Model)
{
    if (ModelState.IsValid)
    {
        /* Other processing occurs here */ 

        //finally return View
        return View(Model);
    }
    else 
    {
        return View();
    }
}

我们的模型属性上有System.ComponentModel.DataAnnotations

有人遇到过这种情况吗?

【问题讨论】:

  • 发布您的模型属性以及哪些属性引起了 CWE 问题。我在 SO 上搜索了类似的问题,只是在这里找到了一个条目:stackoverflow.com/questions/44289347/….
  • 我们的视图模型非常庞大..您想查看全部内容吗?他们没有说明哪些属性影响了扫描结果。这就是这里的全部问题.. 我不知道他们在找我们做什么:/

标签: c# asp.net-mvc asp.net-mvc-5 veracode


【解决方案1】:

我自己一直在处理这个问题。基本的罪魁祸首是您没有在参数上设置 [Bind] ,指定允许的属性。

我以前的登录控制器操作是这样的

public ActionResult SignIn(SignInViewModel viewModel)

为了更正它,我需要它像这样阅读

public ActionResult SignIn([Bind(Include = "Email,Password,UtcOffset")]SignInViewModel viewModel)

这对 MVC 说的只是属性 EmailPasswordUtcOffset 将从 SignInViewModel 中读取,因此如果黑客还设置了 LastLogonTime,它将被忽略。

顺便说一句,由于 Veracode 的安全检查,我认为这种模型绑定现在非常尴尬,考虑到开发人员现在必须使字符串与目标处的道具名称保持同步。好麻烦。

【讨论】:

  • 我也遇到了Bind 可能的解决方案,并在一些控制器操作上实现了该解决方案以进行测试,但扫描结果中仍然存在“缺陷”。在他们的一位安全技术人员在咨询电话中发现我们的代码没有问题后,我们已经使用 veracode 打开了技术支持票证。他对我们为什么被叮咬感到困惑。一旦他们弄清楚了,我会发回我听到的内容
  • 我也完全同意必须在每个控制器操作中添加Bind 非常笨拙。我对这个缺陷所做的几乎所有研究似乎都围绕着实体框架和直接从模型中传递到控制器的数据库更改。我们根本不使用 EF,并且按照存储过程的存储库模式完全抽象了我们的 DAL。我希望 Veracode 的平台足够智能,能够意识到何时使用 EF,并相应地报告 EF“缺陷”
  • @mituw16 您是否收到关于您的查询的 veracode 回复?我们的应用程序也面临同样的问题。
  • @hgarg 我确实做到了,是的。他们需要对扫描引擎进行更改。他们的扫描引擎出现问题,与我们使用异步控制器操作有关,这导致了问题。我终于注意到他们的扫描仪在非异步控制器操作方面没有问题。在我们弄清楚这一点之后,他们解决了扫描引擎的问题,一切都很好。老实说,整个过程是一个巨大的过程,在他们最终承认他们的引擎中存在错误之前花了将近 2 个月的时间来解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-02
  • 2021-11-06
  • 1970-01-01
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多