我们都知道我们应该使用预准备语句或适当的替换/格式化规则,以防止在我们的应用程序中进行sql注入.
但是,当看一下MySQL的字符文字列表时,我注意到它包含以下字符:
\0 ASCII NUL(0x00)字符.\' 单引号(')字符.\" 双引号(")字符.\b 退格字符.\n 换行符(换行符).\r 回车符.\t 制表符.\Z ASCII 26(Ctrl+ Z).请参阅下表后面的注释.\\ 反斜杠(\)字符.\% 一个%角色.\_ 一个_角色.现在,虽然%和_字符需要进行转义以防止将不需要的通配符注入到LIKE语句中,并且'(单引号),\(反斜杠)和"(双引号)都需要进行转义以防止注入任意SQL - 未转义的任何其他字符可能直接导致SQL注入漏洞,否则将无法存在?有没有人有这样一个漏洞的真实世界的例子?
让我们假设我们正在构建我们的查询,如:
SELECT * FROM users WHERE username='$user'
Run Code Online (Sandbox Code Playgroud)
$user唯一未转义的字符文字\b(退格),\0(NUL),\n(换行符),\r(换行符),\t(制表符)或\Z(Ctrl+ Z)允许将任意SQL注入此查询的位置是否有任何值?