PHP代码审计 05 XSS 存储型漏洞

本文记录 PHP 代码审计的学习过程,教程为暗月 2015 版的 PHP 代码审计课程

PHP 代码审计博客目录

1. 简介

  1. 存储型 XSS 漏洞

    代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS 比较危险,容易造成蠕虫,盗窃cookie 等

  2. 审计 SQL 语句

    主要是update insert 更新和插入语句内容输入输出没有被过滤或者过滤不严

  3. 防御

    htmlspecialchars() 函数

    预定义的字符是:

    & (和号) 成为 &
    " (双引号) 成为 "
    ' (单引号) 成为 '
    < (小于) 成为 &lt;
    > (大于) 成为 &gt;
    

2. 示例演示

  1. 在 DVWA 上测试存储型 XSS 漏洞

    测试结果为弹窗

  2. 源代码中的函数分析

    <?php 
    
    if(isset($_POST['btnSign'])) 
    { 
    
       $message = trim($_POST['mtxMessage']); 
       $name    = trim($_POST['txtName']); 
    
       // Sanitize message input 
       $message = stripslashes($message); 
       $message = mysql_real_escape_string($message); 
       $message = htmlspecialchars($message); 
    
       // Sanitize name input 
       $name = stripslashes($name); 
       $name = mysql_real_escape_string($name);  
       $name = htmlspecialchars($name); 
    
       $query = "INSERT INTO guestbook (comment,name) VALUES ('$message','$name');"; 
    
       $result = mysql_query($query) or die('<pre>' . mysql_error() . '</pre>' ); 
    
    } 
    
    ?> 
    

    以上用到了三个过滤函数,下面开始分析

  3. stripslashes() 函数

    stripslashes() 函数删除由 addslashes() 函数添加的反斜杠。
    提示:该函数可用于清理从数据库中或者从 HTML 表单中取回的数据

    实例:
    <?php
    echo stripslashes("Who\'s Bill Gates?");
    ?>
    
  4. mysql_real_escape_string() 函数

    (PHP 4 >= 4.3.0, PHP 5)
    转义 SQL 语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集

    下列字符受影响:
    \x00
    \n
    \r
    \
    '
    "
    \x1a
    
  5. htmlspecialchars() 函数

    把预定义的字符转换为 HTML 实体。

    预定义的字符是:
    & (和号)成为 &
    " (双引号)成为 "
    ' (单引号)成为 '
    < (小于)成为 <
    > (大于)成为 >
    

    如需把特殊的 HTML 实体转换回字符,请使用 htmlspecialchars_decode() 函数

    语法参数详解

    htmlspecialchars(string,flags,character-set,double_encode)
    语法格式中可以选择编码单引号或者双引号以及编码字符集
    

猜你喜欢

转载自blog.csdn.net/kevinhanser/article/details/81134233