【发布时间】:2019-12-03 14:28:01
【问题描述】:
我已尝试添加 null 检查并尝试捕获块,但我无法解决此问题。
错误: VCSSource/Web/Controllers/EnvController.cs 中的 DeleteConfirmed 在第 180 行可能无意中允许在对象中设置 DeleteConfirmed 中的 SaveChanges 的值 VCSSource/Web/Controllers/EnvController.cs 在第 180 行
代码:
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(int id)
{
if (id > 0) // fix for CheckMarx : Unsafe Object Binding
{
ENV eNV = db.ENVs.Find(id);
ENV eNV_del = db.ENVs.Remove(eNV);
try
{
if (eNV_del != null && eNV_del.ENV_NM.Length > 0) {
db.SaveChanges();
}
return RedirectToAction("Index");
}
catch (DataException ex)
{
throw ex;
}
}
else
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
}
【问题讨论】:
-
id有什么限制?可以是负数吗?它希望您验证输入。如果确实有任何 id 有效,那么您可以将其标记为不可利用。 Checkmarx 并不是真正的权威,它只是做出了有根据的假设。
-
@JoshWilliard,感谢您提供的信息。我已添加验证,但问题仍然存在。
-
我怀疑 id 是一个输入参数。如果是,Checkmarx 会看到对 DB 的直接引用,并将其标记为 Unsafe Object Binding。
标签: c# asp.net-mvc checkmark checkmarx