PHP_ SELF不接受字符“”之后的字符串<&”;


PHP_SELF does not accept the string after character "<"

我正在学习PHPhttp://www.w3schools.com.在部分中http://www.w3schools.com/php/php_form_validation.asp,提到了PHP_SELF的安全风险,并给出了一个实例http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E

然而,当我在测试环境中尝试这个例子(Mac OS X Yosemite上的XAMPP)时,我看不到弹出的脚本框。然后,我尝试打印/回显PHP_SELF的内容,奇怪的是,"<"之后的字符串被忽略了。

我的测试脚本如下:

<?php
    echo $_SERVER["PHP_SELF"], "<br>";
?>

当我在Safari/合唱地址栏中输入localhost/20160108.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E时,我得到:

/20160108.php/">

当我输入localhost/20160108.php/%22%3Escript%3Ealert('hacked')%3C/script%3E时,我得到:

/20160108.php/">script>警报(‘已锁定’)

PHP_SELF似乎不接受%3C之后的子字符串(即"<")。

有人能帮我理解并解决这个问题吗?谢谢

当我进入localhost/2016108.php/%22%3E%3Script%3Alert('hacked')%3C/script%3E在Safari/合唱地址栏中,我得到:

/20160108.php/">

当我进入localhost/2016108.php/%22%3Script%3Alert('hacked')%3C/script%3E,I获取:

/20160108.php/">script>alert('hacked')

PHP_SELF似乎不接受%3C之后的子字符串(即。"<")。

PHP_SELF确实接受。请注意您的第二个url

localhost/20160108.php/%22%3Escript%3Ealert('hacked')%3C/script%3E

%3E(">") 之后没有%3C("<")

我想你期待的是/20160108.php/"><script>alert('hacked')</script>,所以你可以试试这个url

localhost/20160108.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E

我做了一个简单的测试,PHP_SELF确实接受

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
</form>
<?php 
    echo $_SERVER["PHP_SELF"];
?>
</body>
</html>

使用localhost/20160108.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E浏览文件会在mozilla firefox中引起警报,但在谷歌chrome中不会。

"page"是用HTML编写的,所以<的意思是"启动一个标签"。您必须使用实体在HTML中表示具有特殊含义的字符。htmlspecialchars函数应该可以执行您想要的操作:

<?php
    echo htmlspecialchars($_SERVER["PHP_SELF"]), "<br>";
?>