Checkmarx 扫描中的不安全对象绑定
Unsafe Object Binding in Checkmarx scan
我尝试添加 null
检查和尝试捕获块,但我无法解决这个问题。
Error :
The DeleteConfirmed at VCSSource/Web/Controllers/EnvController.cs
in line 180 may unintentionally allow setting the value of SaveChanges in DeleteConfirmed, in the object
VCSSource/Web/Controllers/EnvController.cs at line 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 执行操作而无需任何进一步验证(即任何人都可以使用该 ID 访问该端点并删除该项目)。
这个问题的部分原因是,攻击者从 1 开始遍历整数并删除 ENV 中的任何内容是微不足道的。
您需要将此标记为 'not exploitable',因为您了解此端点是如何在应用程序中锁定的,或者可能引入查找此对象的辅助方法(例如 [=17 上的 GUID 标识符) =]) 并让方法采用 GUID 标识符而不是整数主键。
我尝试添加 null
检查和尝试捕获块,但我无法解决这个问题。
Error : The DeleteConfirmed at VCSSource/Web/Controllers/EnvController.cs in line 180 may unintentionally allow setting the value of SaveChanges in DeleteConfirmed, in the object VCSSource/Web/Controllers/EnvController.cs at line 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 执行操作而无需任何进一步验证(即任何人都可以使用该 ID 访问该端点并删除该项目)。
这个问题的部分原因是,攻击者从 1 开始遍历整数并删除 ENV 中的任何内容是微不足道的。
您需要将此标记为 'not exploitable',因为您了解此端点是如何在应用程序中锁定的,或者可能引入查找此对象的辅助方法(例如 [=17 上的 GUID 标识符) =]) 并让方法采用 GUID 标识符而不是整数主键。