是否足以禁止输入中的单引号以避免SQL注入?

时间:2013-07-01 11:29:32

标签: c# sql-server sql-injection

我继承了一个旧的软件,代码在构造使用字符串连接的SQL语句之前检查用户输入是否包含单引号字符'

这是否足以避免SQL注入(除了样式不好)还是我必须立即采取行动并将其更改为参数用法?

3 个答案:

答案 0 :(得分:7)

不,这还不够。

是的,您必须立即采取措施并将其更改为适用的参数用法。

您只需遵循一些指导原则:

  1. 永远不要注意任何注射。但请确保正确地格式化您的SQL文字。格式正确的文字是防错的 - 就像副作用一样 - 也是无懈可击的。
  2. 发现SQL查询由几种不同类型的文字组成。每个都需要不同格式,对所有其他格式不兼容且无用。
  3. 确保无条件应用此类格式。准备好的陈述唯一可以确定的方式

答案 1 :(得分:3)

使用黑名单方法(即阻止单引号)可能有助于防止特定情况,但通常使用参数化查询会更好,因为将所有向量列入黑名单很困难。

仍然可以在没有引号described here的情况下进行SQL注入,因此虽然阻止单引号可能会阻止“简单”的SQL注入,但这并非万无一失。 (这个例子是公开的,但可能还有其他不太知名的漏洞被使用)。

答案 2 :(得分:-3)

是的,在SQL Server中,过滤'或用'替换''会停止SQL注入。

正如Daniel Hilgarth在评论中提到的那样,你不应该将C#字符串作为SQL整数传递。

(我知道这不是一个受欢迎的职位,但据我所知,这是正确的。)