我有一个$_GET
,用户可以将$_GET
字符串发送到MySQL,所以问题很简单:
是这个查询:
mysql_query("SELECT XX FROM ZZ WHERE YY %LIKE% " . htmlspecialchars($_get['string']) . ";");
足以安全吗?或者我应该添加超过htmlspecialchars()
的东西以保证安全?
提前感谢所有回复。
答案 0 :(得分:3)
<强>不安全。强>
即使显示htmlspecialchars做“它的事情”的简单示例数据 - 它只是错误的“事物”。
1;DROP TABLE all_your_precious_data--&
快乐的编码。
解决方案:根据PDO或mysqli使用占位符(如果您希望继续推广过时的实践,请使用mysql_real_escape_string
)。
请参阅Best way to stop SQL injection in PHP和Prevent injection SQL with PHP以及Can SQL injection be prevented with just addslashes?
答案 1 :(得分:2)
htmlspecialchars
没有与MySQL有关。它用于转义HTML特殊字符,这些字符在被评为 HTML 时具有特殊含义。在将不受信任的数据写入浏览器之前,应该使用它,而不是数据库。
您需要完全删除htmlspecialchars
,并使用mysql_real_escape_string
,或者更好,PDO。
答案 2 :(得分:0)
这可能不安全,你最好使用mysql_real_escape_string。