我继承了一个旧的软件,代码在构造使用字符串连接的SQL语句之前检查用户输入是否包含单引号字符'
。
这是否足以避免SQL注入(除了样式不好)还是我必须立即采取行动并将其更改为参数用法?
答案 0 :(得分:7)
不,这还不够。
是的,您必须立即采取措施并将其更改为适用的参数用法。
您只需遵循一些指导原则:
答案 1 :(得分:3)
使用黑名单方法(即阻止单引号)可能有助于防止特定情况,但通常使用参数化查询会更好,因为将所有向量列入黑名单很困难。
仍然可以在没有引号described here的情况下进行SQL注入,因此虽然阻止单引号可能会阻止“简单”的SQL注入,但这并非万无一失。 (这个例子是公开的,但可能还有其他不太知名的漏洞被使用)。
答案 2 :(得分:-3)
是的,在SQL Server中,过滤'
或用'
替换''
会停止SQL注入。
正如Daniel Hilgarth在评论中提到的那样,你不应该将C#字符串作为SQL整数传递。
(我知道这不是一个受欢迎的职位,但据我所知,这是正确的。)