今天我遇到了一些奇怪的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上提供的字符串的方法吗?
谢谢, 波阿斯
PS。我正在使用PHP 5.2.11
答案 0 :(得分:6)
这种情况发生了,因为你在php.ini中打开了“魔术引号”开关。从手册:
启用时,所有'(单引号), (双引号),\(反斜杠)和NULL 字符转义为 自动反斜杠。这是 与addslashes()相同。
在此处详细了解: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.
答案 1 :(得分:0)
您可以使用strip_slashes()函数轻松解决此问题。你应该避免使用魔法引号;出于安全考虑,他们已被弃用。
答案 2 :(得分:0)
打开.htaccess文件并输入类似的内容
php_flag magic_quotes_gpc off
php_flag magic_quotes_runtime off