如何开启漏洞防护开关

我去年帮朋友排查一台被入侵的何开护开服务器时,发现攻击者根本没用什么高级手段——就是启漏利用了一个默认关闭的PHP函数危险开关。那台机器上跑着老旧的洞防Discuz论坛,黑客通过一个上传接口绕过了限制,何开护开直接执行了系统命令。启漏事后我检查配置,洞防`disable_functions`那一栏居然是何开护开空的,等于把大门钥匙挂在了锁孔上。启漏

这类漏洞防护开关,洞防平时没人注意,何开护开可一旦出事就是启漏大事。它不是洞防什么高深技术,就是何开护开系统或软件里预设好的安全选项,默认状态往往为了兼容性而关闭,启漏需要你手动打开。洞防今天拿最常见的几个说事,你照着操作就能堵上大半的坑。

第一处:PHP的disable_functions

打开你的php.ini文件,搜索`disable_functions`。这一项是用来禁止危险函数执行的,比如`exec`、`system`、`shell_exec`、`passthru`、`proc_open`这些能直接调用系统命令的函数。如果你用不到,就把它们全部写进去,用逗号分隔。我见过很多站长图省事,或者用了某些需要这些函数的组件,干脆留空。除非你明确知道自己在跑什么,否则建议一律禁用。改完记得重启PHP-FPM或Apache,配置才会生效。

第二处:MySQL的local_infile

MySQL有个参数叫`local_infile`,默认是开启的。它的作用是允许客户端通过LOAD DATA LOCAL INFILE读取服务器上的本地文件。听着方便,实际是个大隐患——如果SQL注入点没堵死,攻击者可以联合这个功能把`/etc/passwd`之类的敏感文件读出来。在my.cnf的[mysqld]段落下加一行`local_infile=0`,重启MySQL服务。顺带说一句,很多云数据库默认就把这个关了,但自建库的人经常忽略。

第三处:Redis的保护模式

Redis默认只监听127.0.0.1,但如果你改了bind配置绑定到0.0.0.0,又没有设密码,那等于裸奔。更隐蔽的是`protected-mode`这个开关,默认是yes,可一旦你启用了某些需要远程访问的配置,它可能自动变成no。检查redis.conf里`protected-mode yes`是否还在,同时务必设置`requirepass`强密码。去年有波挖矿病毒专门扫6379端口,没密码的Redis全被种了定时任务。

这几个开关改完,你的基础防线就算立起来了。但别以为这就完事了——防护开关是静态的,攻击手法是动态的。我见过有人开了所有推荐开关,结果因为没更新版本,被一个已知CVE直接打穿。开关只是给你争取时间,真正的安全靠的是持续关注和及时补丁。

最后提醒一句:改配置前先备份原文件,改完用`php -m`、`mysql -e "SHOW VARIABLES LIKE 'local_infile';"`这类命令验证是否生效。别信那些“一键安全加固”脚本,自己动手改一遍,你才能记住每个开关的位置和作用。出了事再回头看配置,那时候后悔都来不及。