mysql_escape_string()是否使sql注入不可能?

时间:2013-08-22 01:16:40

标签: php mysql sql-injection

我的问题不是需要帮助代码,但我只是想知道mysql_escape_string()是否使SQL注入不可能。

我看到很多人使用这个函数来实现sql-security。如果我使用mysql_escape_string(),我还需要使用参数查询吗?

还有,请你告诉我一个使用这个函数的好方法,还是mysql_escape_string($ string)就足够了?

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

提前致谢:)。

3 个答案:

答案 0 :(得分:2)

不要问“我还需要使用参数吗?”,请关闭训练轮并使用参数化查询。

StackOverflow经验丰富的人不会因为我们没有更好的事情可以一遍又一遍地说“使用参数化查询”。

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

答案 1 :(得分:2)

  

如果mysql_escape_string()无法进行SQL注入。

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

  

我看到很多人将这个功能用于sql-security。

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

  

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

相反,如果您使用参数,则不需要此功能。

  

还可以告诉我一个使用此功能的好方法

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

  

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

是。但只有在这些条件下:

  • 使用最新版本。
  • 它用于实际目的,而不是防止注射
  • 用于处理参数
  

您能否向我解释如何在查询字符串中使用参数

我希望你喜欢PDO tag wiki

中的解释

答案 2 :(得分:1)

我建议您使用PDO的参数化查询。这就是你所需要的,所以不要担心mysql_escape_string()(不管怎样都会弃用)。

以下是有关如何使用PDO的教程:http://www.phpro.org/tutorials/Introduction-to-PHP-PDO.html


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