我想保护数据库免受SQL注入攻击,我注意到帖子http://www.dascode.net/post/2009/11/01/An-example-of-how-to-check-for-SQL-Injections.aspx可能很有用。
这是一个场景(我正在使用实体框架)
1)用户想添加例如评论如“我想选择一本书,然后打开它并获得一个字符”。
代码段(示例):
string commVal = "lorem";
using(DB ctx = new DB())
{
Comment c = new Comment { Value = commVal };
ctx.Comment.Add(c);
ctx.SaveChanges();
}
正如您所看到的,它不是SQL注入,但该字符串包含不需要的单词 - select
,open
,char
。因此,防止SQL注入的唯一方法是在不需要的单词周围添加引号?
答案 0 :(得分:4)
不,原始文章根本不起作用。避免SQL注入攻击的最简单和最便宜的方法是使用参数化查询,而EF(以及几乎所有ORM)就是这样做的。
参数化查询是一种查询,其中所有外部值都被(强类型)参数替换。参数值是带外传递的,因此无法进行SQL注入。
使用参数化查询时有许多额外的好处:
因此,原始文章对注射攻击持开放态度,而EF是安全的。