在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
这两天在看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]); } } ?> 结果如图:
|
2022-08-17
2022-11-06
2022-08-17
2022-07-18
2022-07-22
请发表评论