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代码中撤消它的简洁方法,但你应该关闭它.
这是由于魔术引号,你应该把它关掉.
以下是关闭它的方法: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