PHP代码审计 04 XSS 反射型漏洞

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

PHP 代码审计博客目录

1. 简介

  1. 反射型XSS 漏洞

    它通过给别人发送带有恶意脚本代码参数的URL,当URL 地址被打开时,特有的恶意代码参数被HTML 解析、执行。
    它的特点是非持久化,必须用户点击带有特定参数的链接才能引起。

  2. _SERVER 变量参数

    $_SERVER[‘PHP_SELF’] //直接在URL中输出执行XSS

    $_SERVER[‘HTTP_USER_AGENT’] //HTTP头中构造XSS

    $_SERVER[‘HTTP_REFERER’] //Referer头中构造XSS

    $_SERVER[‘REQUEST_URI’] //显示 URL 中的XSS内容

  3. 防御

    htmlspecialchars() 函数

    预定义的字符是:

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

2. 漏洞演示

  1. 变量的直接输出

     
    

    浏览器执行 http://127.0.0.1/test.php?xss=alert(123);

    输出结果为一个弹窗

    PHP代码审计 04 XSS 反射型漏洞_第1张图片

    浏览器执行 http://127.0.0.1/test.php?xss=alert(document.cookie);

    输出结果为 cookie 的弹窗,把 alert() 括号里的值换成 document.cookie 即可

  2. $_SERVER 变量参数

    1. $_SERVER[‘PHP_SELF’] //直接在URL中输出执行

       
      

      浏览器执行 http://127.0.0.1/test.php/xss=alert(123);

      PHP代码审计 04 XSS 反射型漏洞_第2张图片

    2. $_SERVER[‘HTTP_USER_AGENT’] //HTTP头中构造XSS

       
      

      浏览器执行 http://127.0.0.1/test.php

      PHP代码审计 04 XSS 反射型漏洞_第3张图片

    3. $_SERVER[‘HTTP_REFERER’] //Referer头中构造

       
      

      浏览器执行 http://127.0.0.1/test.php

      PHP代码审计 04 XSS 反射型漏洞_第4张图片

    4. $_SERVER[‘REQUEST_URI’]

       
      

      浏览器执行 http://127.0.0.1/test.php

      PHP代码审计 04 XSS 反射型漏洞_第5张图片

3. 防御

  1. htmlspecialchars() 函数

    预定义的字符是:

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

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

语法参数详解:

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

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