【问题标题】:Is SQL Injection possible when using PDO quote()?使用 PDO quote() 时是否可以进行 SQL 注入?
【发布时间】:2015-09-09 21:13:05
【问题描述】:

我有以下代码(它的简单版本):

$query = "SELECT *
FROM text
WHERE MATCH (text) AGAINST ('".$pdo->quote($_GET["q"])."' IN BOOLEAN MODE);";

有什么方法可以克服 quote() 函数并将 SQL 注入查询 - 还是 quote() 100% 安全?

非常感谢!

【问题讨论】:

  • @chris85,对不起 - 我编辑了标题和标签。我有点累了。 ;)
  • 这就是重点。更好的是使用参数化查询:AGAINST (? IN BOOLEAN MODE)
  • ->quote() 自己添加单引号。

标签: php mysql pdo sql-injection


【解决方案1】:

PDO::quote() 在输入字符串周围放置引号(如果需要)并在输入字符串中转义特殊字符,使用适合底层的引用样式司机。

所以看起来它可以防止 SQL 注入。 虽然,准备好的语句保证 SQL 注入保护,我们可以从 PHP 手册中看到:

如果您使用此函数构建 SQL 语句,强烈建议您使用 PDO::prepare() 来准备带有绑定参数的 SQL 语句而不是使用 PDO::quote () 将用户输入插入到 SQL 语句中。带有绑定参数的预处理语句不仅更便携、更方便、不受 SQL 注入影响,而且执行起来通常比插值查询快得多,因为服务器端和客户端都可以缓存已编译的查询。

你可以在http://php.net/manual/en/pdo.quote.php阅读更多关于它的信息

【讨论】:

    猜你喜欢
    • 2019-12-06
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 2016-11-08
    • 2020-03-25
    • 2022-06-13
    • 2019-02-13
    • 2013-02-25
    相关资源
    最近更新 更多