今天我遇到了 PHP 的一些奇怪问题,我在文档中找不到正确的解释。考虑以下代码:
<?php
echo $_GET['t']. PHP_EOL;
?>
代码很简单 - 它在 url 上采用单个 t 参数并将其输出回来。因此,如果您使用 test.php?t=%5Ca (%5c 是“\”)调用它,我希望看到:
\a
然而,这就是我得到的:
$ curl http://localhost/~boaz/test.php?t=%5Ca
\\a
注意双斜杠。谁能解释一下发生了什么,并给出检索 URL 上提供的字符串的方法?
谢谢,
波阿斯
附言。我正在使用 PHP 5.2.11
发生这种情况是因为您打开了 php.ini 中的“魔术引号”开关。从手册中:
打开时,所有 '(单引号), "
(双引号)、\(反斜杠)和 NULL
字符用 a 转义
自动反斜杠。这是
与addslashes() 的作用相同。
在这里阅读更多相关信息:http://php.net/manual/en/security.magicquotes.php http://php.net/manual/en/security.magicquotes.php
要使您的脚本了解 php.ini 中“magic_quotes_gpc”设置的任何值,您可以像这样编写脚本:
$d = $_GET["d"];
if (get_magic_quotes_gpc()) $d = stripslashes($d);
echo $d; //but now you are kind of vulnerable to SQL injections
//if you don't properly escape this value in SQL queries.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)