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 标识符而不是整数主键。