根据 Veracode,与技术特定输入验证问题相关的 CWE-ID 100“缺陷”使我们的应用程序出现了数百次。
根据他们的文档,补救措施是在使用模型之前检查模型的 ModelState.IsValid
属性。我们在每个 Controller Action 上都这样做,但我们仍然有问题。下面是一个示例 Controller 操作。
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
。
有人遇到过这种情况吗?
最佳答案
我自己一直在处理这个问题。基本的罪魁祸首是你没有在你的参数上设置 [Bind] ,指定允许的属性。
我的旧登录 Controller 操作是这样的
public ActionResult SignIn(SignInViewModel viewModel)
为了更正它,我需要它像这样读
public ActionResult SignIn([Bind(Include = "Email,Password,UtcOffset")]SignInViewModel viewModel)
这对 MVC 来说只是属性 Email
、Password
和 UtcOffset
将从 SignInViewModel
中读取,因此如果黑客还设置了 LastLogonTime
,它将被忽略。
顺便说一句,由于 Veracode 的安全检查,我认为这种模型绑定(bind)现在非常尴尬,考虑到开发人员现在必须使字符串与目标的 prop 名称保持同步。真麻烦。
关于c# - MVC5 的 CWE-ID 100 修复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44417855/