5

我的服务器管理员最近升级到 PHP 5.3,我遇到了一个奇怪的“错误”(或功能,因为 PHP 人有它)。出于明显的安全原因,我的大部分字符串形式数据都在我mysql_real_escape_string身边,但现在看来这种转义已经由 PHP 完成了。

<?php

echo $_GET["escaped"];

?>

<form method="get">
    <input type="text" name="escaped" />
</form>

这输出,如果我输入例如escape 'this test'escape \'this test\'。如果我使用POST而不是GET.

它是直接与 5.3 升级相关,还是我的管理员在 php.ini 文件中触发了一些自动切换?

另外,我应该保持原样(如果它确实是一个很好的防故障机制,可以正确捕获所有 get 和 post 变量),还是应该禁用它(如果可能的话!)并返回mysql_real_escape_string?我的直觉告诉我方法 2 是最好的,但方法 1 会有点自动。:)

编辑:实际上,我需要禁用它。有时我会收集表单数据并将其重新发送到客户端表单以防出现问题(即缺少字段),因此我不希望他/她突然出现斜线。

4

4 回答 4

12

这个“特性”被称为magic_quotes_gpc并且不能保护您免受所有 SQL 注入攻击(addslashes在输入超全局变量的每个元素上调用,例如$_POST$_GET。这忽略了实际的输入/数据库编码)。因此,它已被弃用,不应使用

官方 php 手册包含一个巧妙的方法来在 php 代码中撤消它,但您应该将其关闭

于 2011-07-10T18:11:50.763 回答
6

这是由于魔术引号,您应该将其关闭。

这里是你如何关闭它:http ://www.php.net/manual/en/security.magicquotes.disabling.php

您可以通过 php.ini 或通过从 and 中的所有变量中删除斜杠来执行此操作$_GET$_POST显然前者是推荐的方式。


正如 Will Martin 建议的那样,您也可以通过以下方式更改它.htaccess

php_flag magic_quotes_gpc 关闭

更多信息在这里: http: //php.net/manual/en/configuration.changes.php

于 2011-07-10T18:10:56.707 回答
1

检查php.ini 中的http://www.php.net/manual/en/info.configuration.php#ini.magic-quotes-gpc选项

于 2011-07-10T18:11:44.713 回答
1

听起来您的服务器打开了魔术引号 - 您可以查看 http://www.php.net/manual/en/security.magicquotes.disabling.php以全面讨论禁用它们的方法。

于 2011-07-10T18:12:29.597 回答