我是否可以通过转义单引号和用单引号包围用户输入来防止SQL注入?我意识到,在构建包含用户输入的查询时,参数化SQL查询是对用户输入进行清理的最佳方法,但我想知道接受用户输入和转义任何单引号并用单引号包围整个字符串有什么问题。下面是代码:sSanitizedInput = "'" & Replace(sInput, "'", "''") & "'"用户输入的任何单引号都将替换为双引号,这将消除用户结束字符串的能力,因此他们可能键入的任何其他内容(如分号、百分比符号等)都将是字符串的一部分,而不是作为命令的一部分实际执行。我们使用的是MicrosoftSQLServer 2000,我认为单引号是唯一的字符串分隔符,也是转义字符串分隔符的唯一方法,因此无法执行用户键入的任何内容。我看不出有什么方法可以针对这种情况发起SQL注入攻击,但我意识到,如果这像我所认为的那样防弹,其他人就会想到这一点,这将是一种常见的做法。这个密码怎么了?是否有办法使SQL注入攻击超过这种消毒技术?使用此技术的示例用户输入将非常有用。最新情况:我仍然不知道如何有效地针对这段代码发起SQL注入攻击。有几个人建议反斜杠会转义一个单引号,让另一个单引号结束字符串,以便字符串的其余部分作为SQL命令的一部分执行,我意识到这个方法可以将SQL注入MySQL数据库,但是在SQL Server 2000中,我能够找到的唯一方法是用另一个单引号来转义单引号;反斜杠不能做到这一点。而且,除非有一种方法来停止转义单引号,否则将不会执行其余的用户输入,因为它都将被视为一个连续字符串。我知道有更好的方法来消毒输入,但我更感兴趣的是学习为什么我提供的方法不能工作。如果有人知道针对这种消毒方法进行SQL注入攻击的任何具体方法,我很乐意看到它。
3 回答
HUWWW
TA贡献1874条经验 获得超12个赞
“如果有人知道针对这种消毒方法进行SQL注入攻击的任何具体方法,我很乐意看到它。”
SaniizedInput=“‘”&替换(sInput、“’”)和“‘”
如果基于从数据库检索的数据重新生成sql查询,则为二阶sql注入。 逃出
,数据未经转义就连接在一起,可能是间接注入SQL的.看见 字符串截断-(稍微复杂一点)-场景是有两个字段,比如用户名和密码,SQL将这两个字段连接起来。这两个字段(或者仅仅是第一个字段)都有一个严格的长度限制。例如,用户名限制为20个字符。假设你有这样的代码:
username = left(Replace(sInput, "'", "''"), 20)
sSQL = "select * from USERS where username = '" + username + "' and password = '" + password + "'"
添加回答
举报
0/150
提交
取消