【问题标题】:Does mysql_escape_string() make sql injection impossible?mysql_escape_string() 是否使 sql 注入成为不可能?
【发布时间】:2013-08-22 01:16:39
【问题描述】:

我的问题不是需要代码方面的帮助,而是想知道 mysql_escape_string() 是否使 SQL 注入成为不可能。

我看到很多人将这个函数用于 sql-security。如果我使用mysql_escape_string(),是否还需要使用带参数的查询?

另外你能告诉我一个使用这个函数的好方法吗?或者mysql_escape_string($string)就足够了吗?

如果 mysql_escape_string() 不是一个好习惯。请您向我解释一下如何在查询字符串中使用参数,以便我理解它。我知道如何在 VB.net 中使用参数和东西,但是在 php 和 mysql 中使用参数时我迷失了。

提前致谢:)。

【问题讨论】:

标签: php mysql sql-injection


【解决方案1】:

如果 mysql_escape_string() 使 SQL 注入成为不可能。

mysql_escape_string() 实际上与 SQL 注入无关

我看到很多人使用这个函数来实现 sql-security。

确实很多。他们都处于危险之中。

如果我使用mysql_escape_string(),是否还需要使用带参数的查询?

恰恰相反,如果你使用参数,你就不需要这个函数了。

另外请告诉我一个使用这个功能的好方法

是的,我可以。您可以在自己的参数化查询实现中使用此函数。这是使用此功能的唯一正确方法。不过这不是必需的,您可以使用驱动程序提供的现成参数

如果 mysql_escape_string() 不是一个好习惯。

是的。但仅在以下条件下:

  • 使用的是最新版本。
  • 它的用途是真正的,而不是防止注射
  • 用于处理参数

能否请您解释一下如何在查询字符串中使用参数

希望你喜欢PDO tag wiki中的解释

【讨论】:

    【解决方案2】:

    与其问“我还需要使用参数吗?”,不如放下训练轮,只使用参数化查询。

    StackOverflow 经验丰富的人不会一遍又一遍地说“使用参数化查询”,因为我们无事可做。

    有关如何在 PHP 中使用参数化查询的示例,请参阅http://bobby-tables.com/php

    【讨论】:

      【解决方案3】:

      我建议您使用带有PDO 的参数化查询。这就是你所需要的,所以不要担心mysql_escape_string()(无论如何都已弃用)。

      这里有一个关于如何使用 PDO 的教程:http://www.phpro.org/tutorials/Introduction-to-PHP-PDO.html


      如果我说得不够清楚,传递到您的查询中的任何源自脚本外部的变量(或任何可能包含恶意代码的变量)都应该设置为您的 PDO 语句的参数,这些将为你逃脱。

      【讨论】:

      • 如果您实际上不使用参数化查询,这并不是真正的“您所需要的一切”。在 PDO 中编写不安全的代码是可能的。
      • @AndyLester:现在来吧。我们到这里需要多挑剔?我说过 PDO 是 PHP 中进行参数化查询的主要方式。我不是假设人们是彻头彻尾的白痴。显然他们应该使用参数化查询。
      • 我不是为了吹毛求疵而吹毛求疵。为了 OP 以及其他任何认为他/她可以采用现有的 select * from foo where userid=$id 并将其包装在 PDO 中并且神奇地安全的人,我正在挑剔。你说“显然”,但如果这一切对每个人来说都是显而易见的,我们就不需要 StackOverflow。
      • 好的,我重新阅读了我的答案,我想我明白你的意思了。我改写了。
      猜你喜欢
      • 2017-09-12
      • 1970-01-01
      • 2011-03-27
      • 2021-08-07
      • 2015-05-15
      • 1970-01-01
      • 2017-01-23
      • 2011-12-27
      • 2021-10-06
      相关资源
      最近更新 更多