一个关于阿里云PHP webshell报警的一丁点思考

一大早就看到阿里云控制台一片红,作为红点强迫症必须要把它去掉,点开一看是几个webshell,并且是几台服务器的同一个文件,想必不是被入侵应该是代码问题,如果这么多服务器被入侵,可是够忙活的了。于是我把文件下载下来,查看一下代码:

大约的逻辑是这样的

$act = $request->get('act');
$userId = $request->get('user_id);
...
$params = [$userId,...];
call_user_func_array($act,$params);

很明显这样是有问题的,问题原因是如果act是一个危险的函数,如:eval,system,shell_exec,create_function,show_source,include等等函数,简直就是一个天然的webshell,
但是具体的逻辑中对act做了switch ...case判断,对userId 也转换了数字,所以问题不大,但是接受一个外部的参数作为运行的函数,这样是很危险的。在代码中应该尽量不用。

添加新评论