PHP 5.3自动从表单字符串中转义$ _GET/$ _ POST?

Laz*_*zlo 5 php forms escaping magic-quotes

我的服务器管理员最近升级到PHP 5.3,我得到一个奇怪的"错误"(或功能,因为PHP人员有它).mysql_real_escape_string出于明显的安全原因,我已经掌握了大部分字符串表单数据,但现在看来这种转义已经由PHP完成了.

<?php

echo $_GET["escaped"];

?>

<form method="get">
    <input type="text" name="escaped" />
</form>
Run Code Online (Sandbox Code Playgroud)

此输出,如果我的情况下进入escape 'this test',escape \'this test\'.如果我使用POST而不是相同的话GET.

是直接绑定到5.3升级还是我的管理员可以在php.ini文件中触发一些自动切换?

另外,我应该保持原样(如果它确实是一个正确捕获所有get和post变量的良好的失败证明机制),或者我应该禁用它(如果这甚至可能!)并返回mysql_real_escape_string?我的胆量告诉我方法2是最好的,但方法1有点自动化.:)

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

phi*_*hag 11

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

官方php手册包含一个在PHP代码中撤消它的简洁方法,但你应该关闭它.


Nic*_* A. 6

这是由于魔术引号,你应该把它关掉.

以下是关闭它的方法:http://www.php.net/manual/en/security.magicquotes.disabling.php

你要么通过php.ini文件或通过从所有变量中移除斜杠做$_GET$_POST,显然前者是要走的推荐方式.


正如威尔马丁建议你也可以通过以下方式改变它.htaccess:

php_flag magic_quotes_gpc off

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

  • 您可以使用.htaccess禁用它 - 这是在解析页面之前发生的..htaccess中的`php_flag magic_quotes_gpc Off`. (2认同)