【发布时间】: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