我继承了一个旧软件,代码'
在使用字符串连接构造 SQL 语句之前检查用户输入是否包含单引号字符。
这足以避免 SQL 注入(除了不好的风格)还是我必须立即采取行动并将其更改为参数使用?
我继承了一个旧软件,代码'
在使用字符串连接构造 SQL 语句之前检查用户输入是否包含单引号字符。
这足以避免 SQL 注入(除了不好的风格)还是我必须立即采取行动并将其更改为参数使用?
不,这还不够。
是的,您必须立即采取行动并将其更改为适用的参数用法。
只需一些指导方针,您就可以搞清楚:
使用黑名单方法(即阻止单引号)可能有助于防止特定情况,但通常最好使用参数化查询,因为很难将所有向量列入黑名单。
没有引号的 SQL 注入仍然是可能的,如此处所述,因此虽然阻止单引号可能会阻止“简单”的 SQL 注入,但这并不是万无一失的。(并且该示例已公开,但可能使用了其他不太知名的漏洞利用)。
是的,在 SQL Server 中,过滤'
或替换'
为''
停止 SQL 注入。
正如 Daniel Hilgarth 在评论中提到的,您不应将 C# 字符串作为 SQL 整数传递。
(我知道这不是一个受欢迎的职位,但据我所知,这是正确的。)