使用htmlspecialchars()

时间:2015-07-03 15:26:15

标签: php html5 htmlspecialchars

我正在学习php而且我遇到了htmlspecialchars()它用来防止黑客攻击,怎么样?我在google上看过它,还不明白。你能举个例子吗?

<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


当我删除htmlspecialchars()时 从 <form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>"> 输出是一样的。为什么?那么htmlspecialchars()有什么用?

和 但是,请考虑用户在地址栏中输入以下URL:

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>

2 个答案:

答案 0 :(得分:2)

此函数用于防止XSS攻击它简单而强大,但是如果你想阻止sql注入使用mysqli_escape_string而不是

关于你提供的代码你应该在&#34; echo,print&#34;中使用它。由用户输入的

$website = hmtlspecialchars($_POST['website']);

如果$ website应该是url,你可以验证它:

$website = (filter_var($_POST['website'], FILTER_VALIDATE_URL) === false) ? '' : hmtlspecialchars($_POST['website']);

答案 1 :(得分:2)

如果您不使用htmlspecialchars(),攻击者可能会执行代码,尤其是javascript。

从您的代码尝试提交带有<h1>Hello, World!</h1>作为输入的表单,结果将是

Hello,World

并防止此类攻击我们使用htmlspecialchars()

没有htmlspecialchars(),代码就会被执行

并提交<script>alert('alert');</script>结果将是警告框

在文本框中提供<script>alert('alert');</script>并提交。

enter image description here

<强>结果 enter image description here