Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Checkmarx扫描中的不安全对象绑定_C#_Asp.net Mvc_Checkmark_Checkmarx - Fatal编程技术网

C# Checkmarx扫描中的不安全对象绑定

C# Checkmarx扫描中的不安全对象绑定,c#,asp.net-mvc,checkmark,checkmarx,C#,Asp.net Mvc,Checkmark,Checkmarx,我已尝试添加null检查并尝试catch块,但无法解决此问题 错误: 删除已在VCSSource/Web/Controllers/EnvController.cs上确认 在第180行中,可能无意中允许在对象中的DeleteConfirm中设置SaveChanges的值 第180行的VCSSource/Web/Controllers/EnvController.cs 代码: [HttpPost, ActionName("Delete")] [ValidateAntiForgeryToken] pu

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

错误: 删除已在VCSSource/Web/Controllers/EnvController.cs上确认 在第180行中,可能无意中允许在对象中的DeleteConfirm中设置SaveChanges的值 第180行的VCSSource/Web/Controllers/EnvController.cs

代码:

[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中的任何内容都是微不足道的


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

我认为它突出显示的问题是,您将整数ID作为输入,并在不进行任何进一步验证的情况下直接对该ID进行操作(即,任何人都可以使用该ID点击该端点并删除该项)

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


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

id上的约束是什么?会是负面的吗?它希望您验证输入。如果任何id确实有效,则可以将其标记为不可利用。“马克思并不是真正的权威,它只是做出了受过良好教育的假设。”乔什·威利德,谢谢你提供的信息。我已经添加了验证,但问题仍然存在。我怀疑id是一个输入参数。如果是,则会看到对DB的直接引用,并可能将其标记为不安全的对象绑定。id上的约束是什么?会是负面的吗?它希望您验证输入。如果任何id确实有效,则可以将其标记为不可利用。“马克思并不是真正的权威,它只是做出了受过良好教育的假设。”乔什·威利德,谢谢你提供的信息。我已经添加了验证,但问题仍然存在。我怀疑id是一个输入参数。如果是,请查看对DB的直接引用,并将其标记为不安全的对象绑定。您应该在之前添加授权检查。这将进行检查。您应该在之前添加授权检查。这应该让马克思感到高兴