|   |      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上。 | 
|   | John D · 需要为NULL或NOT NULL的WHERE子句 8 月前 | 
|   | Marc Guillot · 记录值时忽略冲突 9 月前 | 
|   | Fachry Dzaky · 正确使用ROW_NUMBER 9 月前 | 
|   | TriumphTruth · 从满足特定条件的数据集中选择1行 9 月前 |