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() 函数

    预定义的字符是:

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

2. 漏洞演示

  1. 变量的直接输出

    <?php
    echo $_GET['xss'];
    ?>
    

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

    输出结果为一个弹窗

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

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

  2. $_SERVER 变量参数

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

      <?php
      echo $_SERVER['PHP_SELF'];
      ?>
      

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

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

      <?php
      echo $_SERVER['HTTP_USER_AGENT'];
      ?>
      

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

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

      <?php
      echo $_SERVER['HTTP_REFERER'];
      ?>
      

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

    4. $_SERVER[‘REQUEST_URI’]

      <?php
      echo $_SERVER['REQUEST_URI'];
      ?>
      

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

3. 防御

  1. htmlspecialchars() 函数

    预定义的字符是:

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

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

语法参数详解

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

猜你喜欢

转载自blog.csdn.net/kevinhanser/article/details/81134228
今日推荐