htmlspecialchars是否会保护此MySQL查询?

时间:2011-09-08 23:25:35

标签: php mysql get

我有一个$_GET,用户可以将$_GET字符串发送到MySQL,所以问题很简单:

是这个查询:

mysql_query("SELECT XX FROM ZZ WHERE YY %LIKE% " . htmlspecialchars($_get['string']) . ";");

足以安全吗?或者我应该添加超过htmlspecialchars()的东西以保证安全?

提前感谢所有回复。

3 个答案:

答案 0 :(得分:3)

<强>不安全。

即使显示htmlspecialchars做“它的事情”的简单示例数据 - 它只是错误的“事物”

1;DROP TABLE all_your_precious_data--&

快乐的编码。


解决方案:根据PDO或mysqli使用占位符(如果您希望继续推广过时的实践,请使用mysql_real_escape_string)。

请参阅Best way to stop SQL injection in PHPPrevent 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。