这两天在看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]);
}
} ?>

结果如图:

rips中如何使用PHP虚拟机自带函数--token_get_all的更多相关文章

  1. Window10中利用Windbg与虚拟机(window7)中调试驱动建立方法

    想起自己的windbg配置就转载:eqera的windows内核调试配置,真的是获益良多希望他不会介意我转载他的博客,帮了我很多,记录下来给我也给大家, 其中我主要看的是VMWare的pipe建立,而 ...

  2. 客户机中PLSQL DEV访问虚拟机中的ORCLE11g,错误百出!

    客户机中PLSQL DEV访问虚拟机中的ORCLE11g,错误百出! 创建时间: 2017/10/14 18:44 作者: CNSIMO 标签: ORACLE 忙了一下午,只有两个字形容:麻烦!   ...

  3. Linux 在VMware中搭建CentOS6.5虚拟机

    原文:http://www.cnblogs.com/PurpleDream/p/4263465.html Linux 在VMware中搭建CentOS6.5虚拟机 前言:      本文主要是我在大家 ...

  4. 设置 VMware 中的 Mac OS 虚拟机进入 Recovery 模式

    Ø  简介 本文主要介绍 VMware 中的 Mac OS 虚拟机如何进入 Recovery 模式的方法,具体步骤如下: 1.   选择 Mac OS 虚拟机,点击"打开电源是进入固件&qu ...

  5. Linux3 在VMware中搭建CentOS6.5虚拟机

    前言:      本文主要是我在大家hadoop集群之前 ,需啊先安装CentOS虚拟机,记录在此,作为参考.如果能帮助到其他人,自然是更好啦. =========================== ...

  6. VirtualBox中安装CentOS-6.6虚拟机

    1. 下载 可以到官网下载,http://mirror.centos.org/centos/ 如果下载速度太慢的话,也可以到163镜像下载: http://mirrors.163.com/centos ...

  7. VirtualBox中安装CentOS-6.6虚拟机(转载)

    1. 下载 可以到官网下载,http://mirror.centos.org/centos/ 如果下载速度太慢的话,也可以到163镜像下载: http://mirrors.163.com/centos ...

  8. 解决windows 10 9926 中vmware安装的虚拟机无法桥接上网的问题

    从windows 10 出来之后就安装了使用,但一直有一个问题直到9926也没有解决,那就是vmware下的虚拟机无法桥接上网,但NAT方式正常.发现有一种办法可以实现桥接方式上网.但这种方式下本机与 ...

  9. Linux中如何克隆KVM虚拟机

    转载:https://yq.aliyun.com/articles/64860 作者 digoal 日期 2016-11-11 标签 Linux , KVM , 虚拟化 , 克隆 背景 当需要批量部署 ...

随机推荐

  1. bzoj2628: JZPSTR

    Description 问题描述 你要对一个字符串进行三种操作: 0. 在位置x_i处插入一个字符串y_i 1. 删除位置[x_i, y_i)的字符串 2. 查询位置[x_i, y_i)的字符串包含多 ...

  2. MySQL常用命令(参考资料,部分改动)

    一.连接MYSQL 格式: mysql -h主机地址 -u用户名 -p用户密码 . 连接到本机上的MYSQL. 首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root ...

  3. ul中li分列显示

    让ul中li分列显示,用li显示两列如下(要显视多列的自己想办法,哈哈): 2列 <ul> <li style="display:block;float:left;widt ...

  4. 弹出式菜单(下拉菜单)实现——PopupMenu

    PopupMenu代表弹出式菜单,它会在指定组件上弹出PopupMenu,默认情况下,PopupMenu会显示在该组件的下方或上方.PopupMenu可增加多个菜单项,并可为菜单项增加子菜单. 使用P ...

  5. shell 脚本连接mysql数据库查询database中表的数量和表名

    #!/bin/bash MYSQLHOST="127.0.0.1" MYSQLUSER="root" MYSQLPWD="root" MYS ...

  6. iOS 更改启动视图

    TMMainViewCtrl *main = [[TMMainViewCtrl alloc] init]; self.window.rootViewController = main;

  7. tomcat 修改网站路径(Java之负基础实战)

    1.找到server.xml 在tomcat安装路径/conf/server.xml 2.搜索webapps 添加 <Context path="" docBace=&quo ...

  8. jquery 组合键键盘事件

    jQuery处理键盘事件,比如小说网站中常见的按左右键来实现上一篇文章和下一篇文章,按ctrl+回车实现表单提交,google reader和有道阅读中的全快捷键操作... 本文讲述jQuery处理按 ...

  9. [ Android 五种数据存储方式之三 ] —— SQLite存储数据

    SQLite是轻量级嵌入式数据库引擎,它支持 SQL 语言,并且只利用很少的内存就有很好的性能.此外它还是开源的,任何人都可以使用它.许多开源项目((Mozilla, PHP, Python)都使用了 ...

  10. 推荐学习C#的地方

    大神 http://www.cnblogs.com/kingjiong/category/152147.html