htmlspecialchars()的使用

问题描述 投票:0回答:3

我正在学习php,我遇到了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


当我移除

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>

php html htmlspecialchars
3个回答
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


2
投票

这个函数用于防止XSS攻击,它简单而强大,但是如果你想防止sql注入,请使用mysqli_escape_string代替

关于您提供的代码,您应该在用户输入的“echo,print”中使用它

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

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

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

0
投票

为简单起见,只要您想按原样打印 HTML 标签并防止浏览器解释它们,就应该使用此方法。这是清理字符串以避免 XSS 攻击的好方法。或者当您在字符串中输入诸如

>
<
之类的数学运算符时

© www.soinside.com 2019 - 2024. All rights reserved.