4

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

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

4

3 回答 3

7

不,这还不够。

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

只需一些指导方针,您就可以搞清楚:

  1. 永远不要照顾任何注射。但请确保您已正确格式化SQL 文字。格式正确的文字是防错的,并且 - 就像副作用一样 - 也是无懈可击的。
  2. 发现 SQL 查询由几种不同类型的文字组成的事实。每个都需要不同的格式,对所有其他格式不兼容且无用。
  3. 确保无条件应用这种格式。准备好的声明是唯一可以确定的方法。
于 2013-07-01T11:31:33.877 回答
4

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

没有引号的 SQL 注入仍然是可能的,如此处所述,因此虽然阻止单引号可能会阻止“简单”的 SQL 注入,但这并不是万无一失的。(并且该示例已公开,但可能使用了其他不太知名的漏洞利用)。

于 2013-07-01T11:38:19.537 回答
-3

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

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

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

于 2013-07-01T11:32:13.577 回答