首页 游戏 软件 资讯 排行榜 专题
首页
数据库
如何配置禁用所有危险的PHP函数 disable_functions最佳实践

如何配置禁用所有危险的PHP函数 disable_functions最佳实践

热心网友
44
转载
2026-04-27

disable_functions 配置:从语法细节到实战避坑指南

在PHP安全配置中,disable_functions 是一个关键防线,但配置不当,这道防线可能形同虚设。今天,我们就来深入聊聊其中的门道。

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

disable_functions 为什么不能只填函数名列表

很多朋友以为,在 php.ini 里简单写上 disable_functions = exec,system,passthru 就万事大吉了。但问题恰恰出在这里:PHP解析这个配置项时,会把整个字符串当作一个函数名去匹配。这意味着,任何多余的标点、空格甚至换行,都可能导致解析失败,最终一个函数都没禁掉。

结果呢?你可能会在 phpinfo() 里看到 disable_functions 的值为空,或者只有列表里的第一个函数生效了。更危险的是,你以为已经禁用了 shell_exec,攻击者却依然能在线上调用它。

  • 格式必须精确:必须使用无空格的英文逗号分隔。正确写法是 exec,system,passthru,而 exec, system, passthru(逗号后有空格)就是错误的。
  • 禁止换行:值中不能包含换行符,否则PHP会截断解析,后面的内容全部被忽略。
  • 大小写敏感:函数名必须小写,写 EXEC 是无效的。
  • 不支持通配符:这个列表不支持正则或通配符匹配,每个函数名都必须老老实实写全。

哪些函数真正该禁、哪些其实没必要动

禁用函数是个平衡的艺术。禁得太多,可能会“误伤”正常业务,导致Composer、Lara vel的文件锁或WordPress的更新机制瘫痪;禁得太少,又等于给攻击者留了后门。核心原则其实很明确:只瞄准那些能直接执行系统命令或任意读写文件的高危函数,其他风险相对较低的,完全可以交给 open_basedir 和严格的系统权限来控制。

那么,哪些是真正高危、应该优先列入黑名单的呢?通常是WebShell利用链上的常客:

  • 命令执行类execshell_execsystempassthru,这是最直接的威胁。
  • 进程控制类popenproc_open。它们比 exec 更隐蔽,能绕过一些简单的检测。
  • 常被忽略的pcntl_exec。这个函数容易被遗漏,但在某些环境下可以绕过部分 disable_functions 的检查。
  • 文件与网络操作curl_execfile_get_contents。它们本身无害,但一旦配合 php://filter 封装协议或SSRF漏洞,就能读取服务器上的敏感文件。

反过来,有些函数虽然名声在外,但实际没必要禁用,因为它们要么影响面太大,要么在新版本中风险已降低:

立即学习“PHP免费学习笔记(深入)”;

  • assert:在PHP 7.2及以上版本,动态代码执行功能已被默认禁用,且现代攻击更倾向于使用 eval
  • create_function:这个函数在PHP 8.0中已被废弃,禁用它没有实际的安全意义。
  • unserialize:危险的不是这个函数本身,而是反序列化不可信的数据。直接禁用会导致大量依赖它的业务功能崩溃,正确的做法是严格控制输入。

禁用后还要防绕过:proc_open 和 dl 的坑

以为禁了 exec 就高枕无忧了?攻击者的手段可不止这一种。他们可能会转而利用 proc_open 来启动新进程,或者在老版本PHP中,通过 dl 函数动态加载恶意扩展。

这不是危言耸听。像China Chopper、AntSword这类常见的WebShell,其攻击载荷默认就会优先尝试 proc_open,其次才是 exec

  • 务必加入proc_open:必须将 proc_open 加入禁用列表。它比 exec 更隐蔽,返回的是资源句柄,在日志里不那么显眼。
  • 关注dl函数dl 在PHP 8.0+已被移除,但如果你还在使用7.x版本,务必将其禁用。可以通过 php -m 命令检查是否包含 dl 模块。
  • 注意环境变量函数putenvini_set 本身不能直接执行命令,但它们可以配合其他漏洞修改环境变量或PHP配置(例如绕过 open_basedir 限制)。从安全加固的角度,建议一并禁用。

验证是否真生效:别只信 phpinfo()

配置写好了,怎么验证?千万别只看 phpinfo() 的输出。它显示的 disable_functions 值只是从 php.ini 读取的配置项,如果中间被 php_admin_value 指令或容器配置覆盖了,phpinfo() 反映的可能就不是运行时的真实情况。

最可靠的方法,永远是直接测试。可以写一小段代码来尝试调用:

echo @exec('id') ?: 'exec disabled';

但这里也有坑:有些函数被禁用后会触发 E_WARNING 错误,而像 proc_open 这类函数,禁用后只是安静地返回 false,不报任何错误,很容易让人误以为它还能用。

  • 双重验证:写一个最小化的测试脚本,对每个要禁用的函数,既用 function_exists('xxx') 检查,也尝试用 try...catch 块去调用它,观察实际行为。
  • 区分环境测试:务必在CLI(命令行)和FPM(FastCGI进程管理器)两种SAPI下分别测试。FPM的配置可能会在进程池(pool)中被覆盖(例如通过 php_admin_value[disable_functions])。
  • 确认重启生效:修改配置后,记得重启PHP服务,并用 ps aux | grep php 确认新的进程已经加载了最新配置,避免出现“改了文件却没生效”的尴尬。

最后要提醒的是,不同PHP版本对同一函数的禁用行为可能不一致。比如 pcntl_exec,在某些打了特定补丁的PHP 7.4版本里,仍然存在绕过可能。所以,千万别直接照抄网上的禁用列表,一定要根据你自己服务器上运行的PHP版本进行实测。安全配置,细节决定成败。

来源:https://www.php.cn/faq/2314640.html
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

别信大众智慧?研究称预测市场真正依赖的是“知情少数派”
web3.0
别信大众智慧?研究称预测市场真正依赖的是“知情少数派”

预测市场的真相:是群体智慧,还是少数人的游戏? 说起预测市场,很多人脑海里会立刻浮现出“群体智慧”这个词。成千上万的用户对事件反赌,最终价格似乎总能精准反映现实概率——这听起来像是民主化预测的完美典范。但最近一项来自伦敦商学院和耶鲁大学的研究,却给这个浪漫的想象泼了一盆冷水。 研究团队发现,像Pol

热心网友
04.27
伊朗警告波斯湾安全形势严峻,霍尔木兹海峡紧张局势加剧
web3.0
伊朗警告波斯湾安全形势严峻,霍尔木兹海峡紧张局势加剧

伊朗议员警告:若安全受威胁,波斯湾航道或陷动荡 伊朗议员法达侯赛因·马利基近日发出警告,称如果伊朗的沿海安全受到威胁,波斯湾和阿曼海将出现不安全局势。这无疑给该地区的航运前景蒙上了一层阴影。与此同时,市场对于霍尔木兹海峡交通将于5月15日恢复正常的预期,也出现了微妙变化,目前概率为14 5%。是的,

热心网友
04.27
Oracle RAC如何检查归档模式?跨节点确认归档归属
数据库
Oracle RAC如何检查归档模式?跨节点确认归档归属

Oracle RAC归档日志全面检查指南:节点级验证与线程归属深度解析 在Oracle RAC集群环境中,归档日志的配置与状态检查是一项需要精细化操作的关键任务。它要求数据库管理员必须对每个节点逐一进行归档模式、路径设置、日志生成状态的审查,并深刻理解日志线程归属的核心逻辑。检查的核心流程是:首先通

热心网友
04.27
Oracle RMAN恢复时如何重命名日志文件_配置日志路径参数
数据库
Oracle RMAN恢复时如何重命名日志文件_配置日志路径参数

解决RMAN恢复时日志文件名冲突引发的 ORA-01157 错误 在使用RMAN执行数据库恢复操作时,若目标磁盘上已存在同名的在线重做日志文件(例如 redo01 log),恢复进程常会中断并抛出 ORA-01157: cannot identify lock data file 错误。值得注意的是

热心网友
04.27
SQL如何查询用户连续达标的天数_窗口函数状态机模型
数据库
SQL如何查询用户连续达标的天数_窗口函数状态机模型

SQL如何查询用户连续达标的天数:窗口函数状态机模型 说起查询“连续达标”天数,很多人的第一反应可能是用日期相减。但这里有个本质问题需要先想清楚:我们到底在识别什么? “连续达标”的本质是识别不间断的满足条件时间序列,需用LAG()判断状态延续性并用SUM() OVER构造段ID,而非依赖日期相减。

热心网友
04.27

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

我国刀具市场发展调研报告
办公文书
我国刀具市场发展调研报告

我国刀具市场发展调研报告 在当今制造业持续升级的背景下,市场调研报告的重要性日益凸显。一份结构清晰、数据翔实的报告,能为决策提供关键参考。以下这份关于我国刀具市场的调研报告,旨在梳理现状、剖析问题,并为未来发展提供借鉴。 当前,国内刀具年销售额约为145亿元,其中硬质合金刀具占比不足25%。这一比例

热心网友
04.27
国内首份空净市场调研报告
办公文书
国内首份空净市场调研报告

国内首份空净市场调研报告 在公众健康意识日益增强的今天,市场报告的重要性不言而喻。一份结构清晰、数据翔实的报告,能为行业描绘出精准的航图。那么,一份优秀的市场调研报告究竟该如何呈现?近期发布的这份国内空气净化器行业蓝皮书,或许能提供一个范本。 市场增长的势头有多强劲?数据显示,国内空气净化器市场正驶

热心网友
04.27
水利工程供水管理调研报告
办公文书
水利工程供水管理调研报告

水利工程供水管理调研报告 在各类报告日益成为工作常态的今天,撰写一份扎实的调研报告,关键在于厘清现状、找准问题、提出思路。这份关于水利工程供水管理的报告,旨在系统梳理情况,为后续决策提供参考。 一、基本情况 横跨区域的**水库及八座枢纽拦河闸,构成了**运河流域防洪与兴利供水的骨干工程体系。自投入运

热心网友
04.27
财产保全申请书范本
办公文书
财产保全申请书范本

财产保全申请书范本 一份规范的财产保全申请书,是启动财产保全程序的关键文书。其核心在于清晰、准确地列明各方信息、诉求与依据。通常,申请书的结构是固定的,但具体内容需要根据案件事实来填充。下面,我们通过几个典型的范本来拆解其中的要点。 篇一:通用格式范本 首先来看一个通用模板。这个模板清晰地勾勒出了申

热心网友
04.27
暑假大学生防台风社会实践调研报告范文
办公文书
暑假大学生防台风社会实践调研报告范文

“防台抗台”活动由学院的积极分子组成,他们踊跃报名,利用暑期时间奉献自己的青春,为社会尽一份力量。 带队的学院分团委书记吕老师点出了活动的深层价值:这不仅是一次能力锻炼,更是学生认识社会、融入社会并最终回馈社会的关键一步。经过这番历练,团队友谊愈发坚固,协作精神显著增强,感恩之心也油然而生。 青春洋

热心网友
04.27