我学习PHP和我遇到的htmlspecialchars(),它是用来防止黑客攻击,怎么来的?我在谷歌上看过它,还不明白。请给我举个例子吗?使用用htmlspecialchars()的
<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>">
Website : <input type="text" name="website"><br>
<input type="submit" value="Submit" name="button">
</form>
<?php
if($_SERVER["REQUEST_METHOD"] == "POST"){
$website = $_POST['website'];
echo "true";
if(empty($website)){
echo "empty";
}
else{
echo $website;
}
}
?>
当我输入一个网址,这样http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
输出 http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
当我从 <form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>">
删除htmlspecialchars()
输出是一样的。为什么?有什么用的htmlspecialchars()
然后?
和 然而,考虑到用户输入以下网址到地址栏:
http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
在这种情况下,上面的代码将被转换为:(?如何以及在哪里发生这种情况)
<form method="post" action="test_form.php/"><script>alert('hacked')</script>
请尽量回答我的问题,而不是授予它的-1。 A 8小时的搜索后,我来到这里是要问这个问题,所以请尽量澄清这对我:)。 –
你只是逃避PHP_SELF的行动= URL。然后浏览器在发送POST请求时将HTML实体解释掉。 PHP接收原始值。然后你不会逃避'$ website'。 - 另外,是关于[上一个问题]的评论投诉(http://stackoverflow.com/questions/31207902/how-to-convert-to-lt-and-convert-to-gt-using-php)发布几分钟前由一个*不同的用户? – mario
可能的重复[你只在输出上运行htmlspecialchars(),或者你还有其他功能吗?](http://stackoverflow.com/q/526438),[使用htmlspecialchars()进行输入/输出HTML清理,对于MySQL数据库糟糕的设计?(http://stackoverflow.com/q/14148937),[对所有输出需要用htmlspecialchars()?](http://stackoverflow.com/q/17812833),[PHP& MySQL的:什么时候究竟使用ヶ辆(http://stackoverflow.com/q/2077576) – mario