【问题标题】:Unsafe Object Binding in Checkmarx scanCheckmarx 扫描中的不安全对象绑定
【发布时间】:2019-12-03 14:28:01
【问题描述】:

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

错误: VCSSource/Web/Controllers/EnvController.cs 中的 DeleteConfirmed 在第 180 行可能无意中允许在对象中设置 DeleteConfirmed 中的 SaveChanges 的值 VCSSource/Web/Controllers/EnvController.cs 在第 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 有效,那么您可以将其标记为不可利用。 Checkmarx 并不是真正的权威,它只是做出了有根据的假设。
  • @JoshWilliard,感谢您提供的信息。我已添加验证,但问题仍然存在。
  • 我怀疑 id 是一个输入参数。如果是,Checkmarx 会看到对 DB 的直接引用,并将其标记为 Unsafe Object Binding。

标签: c# asp.net-mvc checkmark checkmarx


【解决方案1】:

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

这个问题的部分原因是攻击者很容易从 1 开始迭代整数并删除 ENV 中的任何内容。

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

【讨论】:

  • 您应该先添加授权检查。这应该让 checkmarx 高兴
  • 我面临同样的问题,但 GUID 已经不是整数值。在这种情况下,如果我需要,我应该如何解决这个问题
  • 您需要将其作为一个单独的问题提出,并提供详细信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-03
  • 2021-07-23
  • 1970-01-01
  • 1970-01-01
  • 2020-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多