1.htmlspecialchars的用法 1.1说明 htmlspecialchars( string $string, int $flags = ENT_COMPAT | ENT_HT
htmlspecialchars( string $string, int $flags = ENT_COMPAT | ENT_HTML401, string $encoding = ini_get("default_charset"), bool $double_encode = true): string
1.string:
待转换的 string。
2. flag:
位掩码,由以下某个或多个标记组成,设置转义处理细节、无效单元序列、文档类型。 默认是 ENT_COMPAT | ENT_HTML401。
3. encoding:
本函数使用效果上,如果 string 对以下字符编码是有效的, ISO-8859-1、 ISO-8859-15、 UTF-8、 cp866、 cp1251、 cp1252、 KOI8-R 将具有相同的效果。 也就是说,在这些编码里, 受 htmlspecialchars() 影响的字符会占据相同的位置。
支持以下字符集:
注意:其他字符集没有认可。将会使用默认编码并抛出异常。
4. double_encode:
关闭 double_encode 时,PHP 不会转换现有的 HTML 实体, 默认是全部转换。
总的来说,就是把字符串转换成一串编码,类似于JS编码转换和url编码转换
如下所示:
php$str = '<>a sdd\'"';echo htmlspecialchars($str, ENT_QUOTES) . PHP_EOL;echo htmlentities($str);
上面这串代码会把字符串
<>a sdd\'"
转换成<>a sdd'" <>a sdd'"
;
$str = '<>a sdd\'"';echo htmlspecialchars($str, ENT_QUOTES) . PHP_EOL;echo htmlentities($str);
运行如上这串代码,你就会发现htmlspecialchars的用法:
浏览器和编辑器的运行结果不一样,原因是这样的,为了避免XSS漏洞的注入,可以把要输出的字符串先进行相应的编码,这样就不会运行脚本语句,但是浏览器又会将相应的编码进行转换,使用我们看到的和原来输出的一模一样。
俗话说的好,不了解攻击如何进行防御了,对吧,所以我们马上进入实战
<!DOCTYPE html><!--STATUS OK--><html><head><meta Http-equiv="content-type" content="text/html;charset=utf-8"></script></head><body><?php ini_set("display_errors", 0);$str = $_GET["keyWord"];echo "没有找到和"
.htmlspecialchars($str)."相关的结果.".' $str.'">';?><?php echo "payload的长度:"
.strlen($str)."";?></body></html>
可以把如上代码运行进行XSS注入实验,如上实验是比较困难的一种,所以我们先进行如下比较简单的一种,再来学习上面的一种,代码如下:
$name = $_GET["name"];$name_new = htmlspecialchars($name);?><fORM action="" method="get"><input type='text' value='' name="name"><button>提交</button></form>
由于,输出在标签里面,所以不用担心><号的过滤问题,又
htmlspecialchars($name)
没有设置任何参数,所以是不过滤单引号的,所以使用如下语句:
' onmouseover='javascript:alert(1)
:前面的一个单引号让value='
形成闭合,然后再输出onmouseover='javascript:alert(1)'
我们构造语句一定要正确,否则不执行CSS
接下来讨论比较难的,如果我们只看
htmlspecialchars($str)
,这个题我们一辈子都做不出来,因为,只要我们输入脚本,就会被转义,下面还有一个突破点:
$str
,输入">
进行了
来源地址:https://blog.csdn.net/qq_53568983/article/details/127184182
--结束END--
本文标题: XSS之htmlspecialchars
本文链接: https://lsjlt.com/news/401578.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0