1

我已尝试添加null检查并尝试捕获块,但我无法解决此问题。

错误:第 180 行的 VCSSource/Web/Controllers/EnvController.cs 的 DeleteConfirmed 可能无意中允许在第 180 行的对象 VCSSource/Web/Controllers/EnvController.cs 中设置 DeleteConfirmed 中的 SaveChanges 的值

代码 :

[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);
       }
   }
4

1 回答 1

2

我相信它强调的问题是您将整数 ID 作为输入并直接对该 ID 进行操作而无需任何进一步验证(即任何人都可以使用该 ID 访问该端点并删除该项目)。

这个问题的一部分是攻击者从 1 开始迭代整数并删除 ENV 中的任何内容是微不足道的。

您需要将其标记为“不可利用”,因为您了解此端点是如何在应用程序中锁定的,或者可能引入查找此对象的辅助方法(例如表上的 GUID 标识符)并让该方法采用 GUID标识符而不是整数主键。

于 2019-12-10T12:42:11.857 回答