为什么要禁用高危函数?
禁用高危函数是保障PHP应用安全的核心策略。这些函数本身具备强大的系统操作能力,但一旦被攻击者恶意利用,可能导致服务器被完全控制、数据泄露甚至系统崩溃
一、系统命令与进程操作类(高危)
执行系统命令
pcntl_fork
:创建子进程,可能被用于恶意进程繁殖pcntl_alarm
:设置进程警报,可能干扰系统稳定性
动态加载扩展
dl()
:运行时加载PHP扩展,易引发兼容性问题和安全漏洞
二、文件系统操作类(中高危)
重命名
unlink
:删除文件rename
:重命名文件rmdir
:删除目录
禁用原因:防止恶意删除或篡改服务器关键文件
文件权限修改
chown
:修改文件所有者chgrp
:修改文件所属组
禁用原因:避免提权攻击或系统文件权限被破坏
目录操作
mkdir
:创建目录scandir
:列出目录内容
注意:部分框架(如ThinkPHP)依赖scandir
,需谨慎禁用
三、代码执行类(极高危)
动态代码执行
eval
:直接执行字符串作为PHP代码assert
:断言检查,但可被滥用执行代码create_function
:已废弃,存在代码注入风险
禁用原因:此类函数是代码注入攻击的主要入口
四、环境变量与配置操作类(中危)
环境变量操作
putenv
:修改系统环境变量getenv
:读取环境变量
禁用原因:可能泄露敏感信息或破坏环境一致性
INI配置修改
ini_alter
/ini_restore
:动态修改PHP配置
风险提示:可能导致不可预测的运行时行为
五、系统信息获取类(低危)
getmyuid
:获取脚本所有者UIDgetmypid
:获取当前进程IDgetmyinode
:获取文件inode信息
禁用原因:可能泄露服务器内部信息,但风险较低
禁用方法示例(php.ini配置)
disable_functions = pcntl_fork,pcntl_alarm,dl,unlink,rename,rmdir,chown,chgrp,scandir,eval,assert,create_function,putenv,getenv,ini_alter,ini_restore,getmyuid,getmypid,getmyinode
替代方案建议
- 文件操作:使用权限控制替代直接禁用(如限制目录权限)
- 动态代码:改用闭包或预定义函数
- 进程管理:通过系统级守护进程(如Supervisor)替代PHP进程控制
如需进一步探讨某类函数的具体案例或配置细节,可补充说明方向。
实际操作
如上图所示,我使用的是 小皮面板 ,在软件商店找到已经安装的php然后找到禁用函数的功能然后粘贴想要禁用的函数即可。
经过使用,下面的函数可以直接禁用:
phpinfo,eval,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,fsockopen
总结
禁用高危的函数有助于我们防范不法分子的攻击,定期维护网站,让自己的网站平稳运行。
评论