【问题标题】:Entity Framework - passing null value as parameter实体框架 - 将空值作为参数传递
【发布时间】:2017-10-31 13:29:51
【问题描述】:

我正在使用对比安全性(第三方工具,表明SQL注入,漏洞)和实体框架,我的代码是这样的:

public int Insert(UserAddress userAddress)
{
    _context.Entry(userAddress).State = EntityState.Added;
    _context.SaveChanges();
    return userAddress.Id;
}

SaveChanges() 被执行时,会生成一个插入查询,如下所示:

INSERT [dbo].[Address] ([UserId], [Name], [Address1], [Address2],
                        [City], [State], [PostalCode], 
                        [Location], [LocationTypeId],
                        [BusinessName], [DeliveryInstructions],
                        [IsDefault], [SortOrder])
VALUES ('111111a1-22z2-33x3-44y4-fbad42c09c3a', @2, 'address1', null,
        'Alpharetta', 'GA', 30005,
        'POINT (-80.2427068 30.0925161)', 0,
        '', '',
        1, 0)

现在,根据对比安全性,在查询中传递“null”是不道德的,这是不好的做法 - 但我想允许 null 值!

我可以使用 SQL 参数将空值传递给SaveChanges() 方法吗?

有什么办法可以解决这个问题吗?有人知道吗?

【问题讨论】:

  • 为什么不将空值转换为空字符串?
  • 将您需要的字段组合成ViewModel,然后在保存之前将其映射到您的实体模型。
  • @robAnthody,我在那里有很多存储过程,在 where 子句中检查 IS NOT NULL,所以我认为空字符串不是好方法!
  • @SteveGreene 这已经在代码中完成了,仍然像上面一样生成查询
  • 我不明白这个漏洞。我记得与该问题相关的一些关于关系数据库设计的辩论:dba.stackexchange.com/questions/5222/…

标签: sql-server entity-framework security entity-framework-4 sql-injection


【解决方案1】:

我是 Contrast Security .NET 代理的开发人员之一。我们的产品听起来确实像是误报。在插入语句中使用空值应该没有任何问题。

能否请您提交支持请求并包含您的查找跟踪 xml?我们很乐意查看并最终解决此问题。

【讨论】:

  • 您能告诉我如何或在哪里提交支持请求吗?
  • 嗨 Ankush,请转至 support.contrastsecurity.com 提出支持请求或发送电子邮件至 support@contrastsecurity.com。如果可以,请将您的漏洞发现导出为 XML 并将其包含在您的票证中。我的团队将与您联系。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-06
  • 2016-01-09
  • 1970-01-01
  • 2017-04-13
  • 2015-05-18
  • 1970-01-01
相关资源
最近更新 更多