htmlspecialchars() 函数过滤XSS的问题
2017-03-05 14:32
591 查看
htmlspecialchars()函数的功能如下:
htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。
预定义的字符是:
& (和号)成为 &
" (双引号)成为 "
' (单引号)成为 '
< (小于)成为 <
> (大于)成为 >
它的语法如下:
其中第二个参数flags需要重要注意,很多开发者就是因为没有注意到这个参数导致使用htmlspecialchars()函数过滤XSS时被绕过。因为flags参数对于引号的编码如下:
可用的引号类型:
ENT_COMPAT - 默认。仅编码双引号。
ENT_QUOTES - 编码双引号和单引号。
ENT_NOQUOTES - 不编码任何引号。
默认是只编码双引号的!默认只编码双引号!默认只编码双引号……重要的事情说三遍!!!
于是看下面的代码:
轻松绕过:
加上ENT_QUOTES参数:
查看源代码:
单引号已经被转换了。
htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。
预定义的字符是:
& (和号)成为 &
" (双引号)成为 "
' (单引号)成为 '
< (小于)成为 <
> (大于)成为 >
它的语法如下:
htmlspecialchars(string,flags,character-set,double_encode)
其中第二个参数flags需要重要注意,很多开发者就是因为没有注意到这个参数导致使用htmlspecialchars()函数过滤XSS时被绕过。因为flags参数对于引号的编码如下:
可用的引号类型:
ENT_COMPAT - 默认。仅编码双引号。
ENT_QUOTES - 编码双引号和单引号。
ENT_NOQUOTES - 不编码任何引号。
默认是只编码双引号的!默认只编码双引号!默认只编码双引号……重要的事情说三遍!!!
于是看下面的代码:
<?php $name = $_GET["name"]; $name = htmlspecialchars($name); ?> <input type='text' value='<?php echo $name?>'>
轻松绕过:
加上ENT_QUOTES参数:
<?php $name = $_GET["name"]; $name = htmlspecialchars($name, ENT_QUOTES); ?> <input type='text' value='<?php echo $name?>'>发现无法绕过了:
查看源代码:
单引号已经被转换了。
相关文章推荐
- php不同版本htmlspecialchars函数过滤GBK编码时中文为空
- php 使用htmlspecialchars() 和strip_tags函数过滤HTML标签的区别
- XSS 攻击时怎么绕过 htmlspecialchars 函数呢?
- php 使用htmlspecialchars() 和strip_tags函数过滤HTML标签的区别
- php 使用htmlspecialchars() 和strip_tags函数过滤HTML标签的区别
- XSS漏洞定位和修复方法——htmlspecialchars() 函数
- php 使用htmlspecialchars() 和strip_tags函数过滤HTML标签的区别
- htmlspecialchars函数并不能百分百的防止XSS***
- htmlspecialchars()函数 与 nl2br()函数 配合使用实例
- 转-PHP中htmlentities和htmlspecialchars函数的区别
- php5.4后htmlspecialchars输出为空的问题
- PHP htmlspecialchars() 函数
- PHP 5.4 中经 htmlspecialchars 转义后的中文字符串为空的问题
- php htmlspecialchars()与shtmlspecialchars()函数的深入分析
- PHP中 htmlspecialchars,htmlentities, nl2br函数
- PHP htmlspecialchars() 函数
- 关于htmlspecialchars实体字符转码的问题
- PHP 函数 htmlspecialchars 使用心得
- htmlspecialchars()函数 与 nl2br()函数 配合使用实例
- 和HTMLSpecialChars()功能相反的函数