分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

htmlspecialchars() 函数过滤XSS的问题

发布时间:2023-09-06 01:42责任编辑:顾先生关键词:暂无标签

 htmlspecialchars()函数的功能如下:

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?>‘> ?

  

        发现无法绕过了:
查看源代码:


单引号已经被转换了。

htmlspecialchars() 函数过滤XSS的问题

原文地址:https://www.cnblogs.com/JeromeZ/p/8452819.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved