zoukankan      html  css  js  c++  java
  • htmlspecialchars() 函数过滤XSS的问题

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

      

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


    单引号已经被转换了。
  • 相关阅读:
    存储管理:
    小软件推荐:
    python学习之序列化
    python学习之串口编程
    python学习之常用模块
    Linux调试工具strace和gdb常用命令小结
    adjtimex和时钟的几个概念tick,freq,ppm,jiffies
    koji
    top -Hp pid 显示所有的线程
    Neighbour table overflow---- arp表溢出
  • 原文地址:https://www.cnblogs.com/JeromeZ/p/8452819.html
Copyright © 2011-2022 走看看