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)
     语法格式中可以选择编码单引号或者双引号以及编码字符集
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值