0

我总是从我放入 mysql_real_escape_string 的任何变量中得到\(反斜杠) 。例如 :

$string = mysql_real_escape_string($_GET['string']);
echo $string; //result : here\'s the text

在我对谷歌做了一些研究之后,有人说这个反斜杠是由打开了 magic_quotes_gpc 的服务器设置引起的。我也有这个配置。我在我的phpinfo(), magic_quotes_gpc = ON

我的问题是......关闭这个magic_quotes_gpc真的安全吗?
因为我使用 mysql_real_escape_string 来防止 mysql 注入。通过关闭magic_quotes_gpc,恐怕这会导致我的服务器“不那么强大”。

4

3 回答 3

2

在我看来,您需要对这些科目进行一些相当基本的补习。您显然已经在互联网上阅读并遵循示例,但没有真正理解这些示例为什么正在做它们正在做的事情,或者它们是如何工作的。复制示例而不理解它们不是一件好事。

所以在核心你需要对主题有更深入的了解,这对于像这样的网站来说可能太多了(SO更多的是帮助人们解决特定问题而不是教他们整个主题,尽管你会从浏览地点)。

但是,我将解决您的一些观点:

  • Magic Quotes 是一个过时的 PHP 功能;事实上,它已从最新版本的 PHP 中完全删除。禁用它不会使您的服务器“不那么强大”,或任何类似的东西。事实上,建议不要使用它。

  • 所有以开头的功能mysql_也已被弃用,不再推荐。较新的替代方案是mysqli_xxx()函数或 PDO 库。如果您正在学习使用旧功能的教程,您应该找到更新的教程。

  • mysql_real_escape_string()函数(和 mysqli/PDO 等效函数)旨在向您的字符串添加一个斜杠,它会在其中找到引号字符或其他会导致 SQL 语句无效的字符。运行此函数后在字符串中查找斜线是完全正常且正确的。这称为“转义”字符串(因此是函数的名称)。字符串的“转义”版本只能在构建 SQL 查询的上下文中使用。

于 2013-01-15T13:24:55.637 回答
1

只要您的代码负责正确转义某些字符串(例如通过调用mysql_real_escape_string()等),您就可以在 php.ini 中禁用此功能。事实上,您应该始终确保您的运行环境设置为您需要的参数,方法是调整php.ini或使用.htaccess为特定虚拟主机设置它们。

依赖所有这些magic_...东西从一开始就被打破了,因为一旦它被关闭,你基本上就会遇到问题。通常不会被注意到,除非你被黑了。

于 2013-01-15T12:39:41.863 回答
0

你期望mysql_real_escape_string做什么?

它正在转义字符串,here\'s the text预期的输出也是如此。这与魔术引号无关,魔术引号已经转义了字符串,here\\'s the text在调用mysql_real_escape_string.


当然,正如评论中已经提到的那样,您不应该再使用MySQL_*PHP 中的方法系列,因为它们已被弃用。考虑使用MySQLiorPDO代替,以及准备好的语句。

于 2013-01-15T12:39:34.850 回答