cre*_*ate 4 php sql security sql-injection
尽管许多人士引述htmlspecialchars与功能ENT_QUOTES是不足够的,以防止SQL注入,他们没有提供概念的证明.我自己也想不到任何可能性.
让我们考虑以下示例:
$username = htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8');
$sql = "SELECT * from user WHERE name='$username'";
mysql_query($sql,...);
Run Code Online (Sandbox Code Playgroud)
任何人都可以提供一个示例,除了SQL注入绕过mysql_real_escape_string()时的情况吗?
Gum*_*mbo 13
该字符htmlspecialchars不能编码关键字符\0(NUL字节), \b(退格键),以及所述\字符.
为了利用这一点,您需要一个包含多个注入点的语句.使用此方法,您可以转义一个字符串文字的结束分隔符,从而将其扩展到下一个字符串文字的下一个起始分隔符.然后可以将三个带有注入点的字符串文字转换为两个字符串文字.
例如:
SELECT * from user WHERE (name='$login' OR email='$login') AND password='$password'
Run Code Online (Sandbox Code Playgroud)
现在具有以下值:
login: ) OR 1=1 /*\
password: */--
Run Code Online (Sandbox Code Playgroud)
结果语句如下所示:
SELECT * from user WHERE (name=') OR 1=1 /*\' OR email=') OR 1=1 /*\') AND password='*/--'
Run Code Online (Sandbox Code Playgroud)
这相当于:
SELECT * from user WHERE (name=') OR 1=1 /*\' OR email=') OR 1=1
Run Code Online (Sandbox Code Playgroud)