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的直接引用,并将其标记为不安全的对象绑定。您应该在之前添加授权检查。这将进行检查。您应该在之前添加授权检查。这应该让马克思感到高兴