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

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

PHP 代码审计博客目录

1. 简介

  1. 存储型 XSS 漏洞

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

  2. 审计 SQL 语句

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

  3. 防御

    htmlspecialchars() 函数

    预定义的字符是:

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

2. 示例演示

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

    PHP代码审计 05 XSS 存储型漏洞_第1张图片

    测试结果为弹窗

    PHP代码审计 05 XSS 存储型漏洞_第2张图片

  2. 源代码中的函数分析

     ' . mysql_error() . '
    ' ); } ?>

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

  3. stripslashes() 函数

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

     实例:
     
    
  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)
     语法格式中可以选择编码单引号或者双引号以及编码字符集
    

你可能感兴趣的:(代码审计)