【问题标题】:Does htmlspecialchars protect this MySQL query?htmlspecialchars 是否保护这个 MySQL 查询?
【发布时间】:2023-03-18 20:40:01
【问题描述】:

我有一个$_GET,用户可以将$_GET 字符串发送到 MySQL,所以快速提问:

这是查询吗:

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

足够安全吗?或者我应该添加比htmlspecialchars() 更多的内容以确保安全?

提前感谢您的所有回复。

【问题讨论】:

    标签: php mysql get


    【解决方案1】:

    不安全。

    甚至显示 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 PHPCan SQL injection be prevented with just addslashes?

    【讨论】:

    • 是的,有解决方案。添加了有关该主题的其他 SO 问题的有用链接。第一个链接特别好,展示了一个使用 PDO 的简单示例。
    • @Lucas 还要查看这些链接中的 否定答案 和 cmets - 从这些(不是很好的方法)中学到的东西和好的方法一样多答案。
    【解决方案2】:

    htmlspecialchars 与 MySQL 无关。它用于转义 HTML 特殊字符,当评估为 HTML 时具有特殊含义的字符。您应该在将不受信任的数据写入浏览器而不是数据库之前使用它。

    您需要完全删除htmlspecialchars,并使用mysql_real_escape_string,或者更好的是PDO

    【讨论】:

    • 那么使用 mysql_real_escape_string 是唯一的方法,在这种情况下是完全安全的吗?我也不需要更多的东西了吗?:)
    • @Lucas 不。这不是“唯一的方法”。读到句末。
    • 您可以使用 mysql_real_escape_string 作为替代品,但您应该使用 PDO。
    • 那么如果我切换到 PDO,那么我可以说我完全安全吗?:) 另外,如果我使用 PDO,它会是什么样子?
    • @Lucas 看。没有什么可以说你“完全安全”,所以在那之后不要再问了。你问这些东西的事实很好地表明你不知道你在做什么。 专家不可能让一个重要的网络应用程序“完全安全”,他们实际上知道他们在做什么。阅读 pst 答案中的链接,然后再阅读一些内容,然后在阅读完毕后,再阅读一些内容。我们无法告诉您如何通过一个功能神奇地使您的整个应用程序安全。网络安全是一个极其复杂的话题。
    【解决方案3】:

    可能不安全,最好使用mysql_real_escape_string。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多