rips中如何使用PHP虚拟机自带函数--token_get_all

时间:2023-03-08 19:06:22
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时:

rips中如何使用PHP虚拟机自带函数--token_get_all

不使用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中如何使用PHP虚拟机自带函数--token_get_all

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

rips中如何使用PHP虚拟机自带函数--token_get_all