我必须在PHP中创建一个脚本来扫描其他PHP文件以检查危险的函数调用,如eval,exec。 是否有任何可用的解析器可以为我提供代码的逻辑结构。
或者我必须使用正则表达式。
谢谢,欢迎任何类型的建议。
Arshdeep
编辑:我不认为这是“一枪一击”。我也有其他一些想法,但它仍然是我必须做的事情。
答案 0 :(得分:6)
不要,你只能用脚射击自己。
PHP是一种高度动态的语言。您可能甚至无法想象执行代码的可能性。我有一些尝试预处理PHP沙盒,根据我的经验,我可以告诉你,非常难以解决所有情况。要粗略了解您所面临的情况,请查看exploitable functions list,它是随着时间的推移而创建的,但仍然不完美。
为了回答您的实际问题,我保留了PHP parser written in PHP。您可以通过定义大致类似于此的节点访问者来拦截所有函数调用:
class MyNodeVisitor extends PHPParser_NodeVisitorAbstract {
public function enterNode(PHPParser_Node $node) {
if ($node instanceof PHPParser_Node_Expr_FuncCall) {
if ($node->name instanceof PHPParser_Node_Name) {
// static function name
} else {
// dynamic function name
}
}
}
}
答案 1 :(得分:2)
只需使用disable_function and disable_classes 这只能在php.ini级别更改。
答案 2 :(得分:1)
您可以使用tokenizer执行此操作:
print_r(token_get_all('<?php exec("rm -rf *"); ?>'));
在输出中注意第三个元素是:
[1] => Array
(
[0] => 307
[1] => exec
[2] => 1
)