disable_functions:把PHP危险函数关进笼子

来源:互联网 时间:2026-08-27

服务器被传了WebShell,攻击者在里面一句system('whoami')就拿到执行权限。事后清马属于亡羊补牢,事前把危险函数直接禁掉才是断根。PHP的disable_functions就是干这个的。

; php.ini
[.....]
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source

这份清单覆盖了命令执行和任意文件读取的主要入口。注意eval不是函数、禁不掉,所以才有之前讲过的后门排查;assert、preg_replace的e修饰符这些老洞属于代码审计范畴,靠函数禁用兜不住。

禁用前先评估影响:你的业务代码有没有真的在用这些函数?grep一遍项目目录心里就有数。压缩图片、调外部命令的脚本撞上了禁用名单会直接报错,这类需求单独开一个只有内网能访问的PHP池,主站保持最严格配置。

# 检查项目里用没用危险函数

grep -rn "shell_exec\|passthru\|proc_open\|popen" ./ --include="*.php" | grep -v vendor/

改完重启php-fpm,写个phpinfo或用ini_get('disable_functions')确认生效。攻击者拿到上传点却什么命令都执行不了,横幅会变成勒索软件的变成了只能干瞪眼——这就是纵深防御里最实惠的一层。

相关文章

A5创业网 版权所有

返回顶部