1
3
如果要在存储过程中创建语句并使用sp_executesql,则参数化查询是一个错误的安全网。 |
2
3
这里还有一个问题,关于SQL注入有一些很好的答案… Are Parameters really enough to prevent Sql injections? 这个例子直接来自上面StevenA.Lowe的链接。
下面是一些进一步的阅读… |
3
2
一个具体的例子…
我可能把语法搞错了,但是不管您如何参数化@firstname,它仍然容易受到如下的攻击:
只要使用动态SQL,就可能容易受到SQL注入的攻击。除了使用参数化SQL之外,唯一的解决方案是将输入白名单(或者,如果您感到勇敢,尝试删除危险字符的输入)。 |
4
0
尝试在ADO.NET中搜索漏洞,可能存在安全缺陷。 |
5
0
假设你有一个网站大小的产品目录,你的搜索页面允许按产品名称、描述、颜色和大小搜索(假设你卖胸罩):
您可以使用一个存储过程来动态构造用于搜索的SQL应用程序。通过传递参数来调用它:
由于该过程以一种粗心的方式构造动态SQL,因此仍然对SQL注入开放:
不需要的产品被列入了目录(使这成为一种有益的攻击…)。在这种情况下,适当的修复方法是在动态SQL中使用参数,并进一步将参数传递给
因此,sp_executesql和动态SQL是主要关注的问题。除此之外,还有各种各样的系统过程可以在底层构建动态SQL,而且历史证明有些过程是易受攻击的,特别是在SQL 2000上。 |
jchristo · 释放时服务炸弹爆炸[重复] 6 年前 |
Rod · 检查DataTable是否存在列以及是否为null 6 年前 |
user1451111 · 如何在ADO代码中存储大型查询。NET项目 6 年前 |