zoukankan      html  css  js  c++  java
  • rips中如何使用PHP虚拟机自带函数--token_get_all

    这两天在看rips源码,发现,它在审计php代码时调用了php虚拟机自带的token_get_all此函数。

    这一函数会将php源码按照内置的规则进行归纳,并输出成数组格式。

    如:

    <?php
    
    
    $tokens = token_get_all('<?php echo(123); ?>');
    
    for($i=0 ; $i<count($tokens);$i++){
        for($j=1 ; $j<count($tokens[$i]);$j++){
            echo "</br>";
    //token_name可以将数字表示的字符串的类型转化为php中固定名称,此函数PHP自带
            $token_name = token_name($tokens[$i][0]);
            echo $token_name;
            echo "</br>";
            
            echo htmlspecialchars($tokens[$i][$j]);
        }
    }
    
    
    ?>

    页面展示为:

    使用token_name时:

    不使用token_name时:

    <?php
    
    $tokens = token_get_all('<?php echo(123); ?>');
            
    for($i=0 ; $i<count($tokens);$i++){
        for($j=0 ; $j<count($tokens[$i]);$j++){
            echo "</br>";
            echo "</br>";
            
            echo htmlspecialchars($tokens[$i][$j]);
        }
    }
    
    ?>

    如图:

    rips使用token_get_all对文件进行整理时:

    <?php
    
    
                    $lines_stack = array();
    //读取文件内容并转化成数组
            $lines_stack[] = file("C:\wamp\www\test\index.php");
            echo "</br>";
    //对数组进行整理
            $lines_pointer = end($lines_stack);
    //将数组转化成String型,并使用token_get_all
            $tokens = token_get_all(implode(' ',$lines_pointer));
    //遍历并输出
                     for($i=0 ; $i<count($tokens);$i++){
    //token_get_all所整理出的数组第0位代表字符串类型,第1位代表字符串内容,第2位是字符串所在文件中的行数。
                         for($j=1 ; $j<count($tokens[$i]);$j++){
                             echo "</br>";
                             $token_name = token_name($tokens[$i][0]);
                             echo $token_name;
                             echo "</br>";
            
                             echo htmlspecialchars($tokens[$i][$j]);
                         }
                     }
        
    ?>

    结果如图:

  • 相关阅读:
    easyui datagride 两种查询方式
    SharePoint常用目录介绍
    sharepoint 2013 入门1_ 建立一个网页程序
    Windows2012 显示我的电脑
    你知道 react-color 的实现原理吗
    如何实现 Promise 池
    如何使 pdf 文件在浏览器里面直接下载而不是打开
    macOS 安装 oh-my-zsh 之后 node 失效的问题
    剑指offer[47]——求1+2+3+...+n
    剑指offer[46]——孩子们的游戏(圆圈中最后剩下的数)
  • 原文地址:https://www.cnblogs.com/ermei/p/6385170.html
Copyright © 2011-2022 走看看