【发布时间】:2023-03-18 20:40:01
【问题描述】:
我有一个$_GET,用户可以将$_GET 字符串发送到 MySQL,所以快速提问:
这是查询吗:
mysql_query("SELECT XX FROM ZZ WHERE YY %LIKE% " . htmlspecialchars($_get['string']) . ";");
足够安全吗?或者我应该添加比htmlspecialchars() 更多的内容以确保安全?
提前感谢您的所有回复。
【问题讨论】:
我有一个$_GET,用户可以将$_GET 字符串发送到 MySQL,所以快速提问:
这是查询吗:
mysql_query("SELECT XX FROM ZZ WHERE YY %LIKE% " . htmlspecialchars($_get['string']) . ";");
足够安全吗?或者我应该添加比htmlspecialchars() 更多的内容以确保安全?
提前感谢您的所有回复。
【问题讨论】:
不安全。
甚至显示 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?
【讨论】:
htmlspecialchars 与 MySQL 无关。它用于转义 HTML 特殊字符,当评估为 HTML 时具有特殊含义的字符。您应该在将不受信任的数据写入浏览器而不是数据库之前使用它。
您需要完全删除htmlspecialchars,并使用mysql_real_escape_string,或者更好的是PDO。
【讨论】:
mysql_real_escape_string 作为替代品,但您应该使用 PDO。
可能不安全,最好使用mysql_real_escape_string。
【讨论】: