本文约 3,266 字,预计阅读 9 分钟。文中命令与配置均经过实测,可直接参考执行。
引言
wp-config.php 是 WordPress 的心脏:数据库密码、安全密钥、表前缀全在这里。它一旦泄露或配置不当,攻击者就能直接接管整站。举个常见场景:后台「外观 → 主题文件编辑器」默认是开放的,只要攻击者拿到一个管理员账号,就能在网页上直接改 functions.php 写入后门,连 FTP 都不用。再比如,八组安全密钥(AUTH_KEY、SECURE_AUTH_KEY 等)如果是从别处复制来的、或从来没换过,攻击者就能伪造登录 Cookie 直接冒充你。很多站长只关注改密码,却忽略了 wp-config.php 这层最该加固的地方。本文把最实用的几项配置改动一次讲清,照着改完,站点安全等级立刻上一个大台阶。
故障原因分析
- 后台文件编辑器默认开启。WordPress 允许管理员在后台直接编辑主题和插件文件,脚本一旦拿到管理员权限,第一件事就是往里写后门,无需任何服务器权限。
- 安全密钥沿用旧值或与他人相同。密钥用于加密登录 Cookie,若长期不换或从网上抄来,等于给了攻击者伪造合法登录态的可能。
wp-config.php文件权限过宽。文件被设成 777 或可被 Web 用户写入,任何漏洞都可能直接读取数据库密码。
- 调试模式长期开启。
WP_DEBUG打开会向前台暴露文件路径、数据库结构等敏感信息,为攻击者提供便利。
- 数据库账号权限过大。用 root 账号连库、且只给一个站点用,一旦被注入就是整库沦陷。
分步解决方案
方法一:关闭后台文件编辑(DISALLOW_FILE_EDIT)
编辑网站根目录的 wp-config.php,在 / That's all, stop editing! / 注释之前加入:
// wp-config.php —— 禁止后台编辑主题与插件文件
define( 'DISALLOW_FILE_EDIT', true );
保存后刷新后台,「外观 → 主题文件编辑器」和插件编辑器会自动消失。这一步能有效阻止「拿到后台即写入后门」的攻击链。
如果你连后台安装/删除插件的权限都想收紧(适合已经配置好、不再频繁改动的生产站),可以再加上:
// 禁止后台安装、更新、删除主题与插件(谨慎使用,会影响在线更新)
define( 'DISALLOW_FILE_MODS', true );
注意 DISALLOW_FILE_MODS 会让后台的插件更新功能一并失效,改动前请确保你有能力用 FTP/命令行手动升级。
方法二:更换全部八组安全密钥
WordPress 需要八组密钥:AUTH_KEY、SECURE_AUTH_KEY、LOGGED_IN_KEY、NONCE_KEY、AUTH_SALT、SECURE_AUTH_SALT、LOGGED_IN_SALT、NONCE_SALT。打开官方在线生成器 https://api.wordpress.org/secret-key/1.1/salt/,它会给出全新的随机值。把 wp-config.php 里从 define( 'AUTH_KEY', ... ) 到 define( 'NONCE_SALT', ... ) 这八行整段替换掉。
// wp-config.php —— 用官方生成器产出的新值替换,注意每行都不相同
define( 'AUTH_KEY', '把这里换成生成器给你的新随机串' );
define( 'SECURE_AUTH_KEY', '把这里换成生成器给你的新随机串' );
define( 'LOGGED_IN_KEY', '把这里换成生成器给你的新随机串' );
define( 'NONCE_KEY', '把这里换成生成器给你的新随机串' );
define( 'AUTH_SALT', '把这里换成生成器给你的新随机串' );
define( 'SECURE_AUTH_SALT', '把这里换成生成器给你的新随机串' );
define( 'LOGGED_IN_SALT', '把这里换成生成器给你的新随机串' );
define( 'NONCE_SALT', '把这里换成生成器给你的新随机串' );
换密钥的副作用是:所有用户(包括你自己)会被强制重新登录一次。这正是我们想要的——被盗用的旧登录 Cookie 立刻失效。建议每半年更换一次,怀疑被入侵时立即更换。
方法三:设置正确的文件权限
wp-config.php 只需要被 Web 服务器读取,不需要写入。通过 SSH/FTP 把它设成 644(或更严格的 600):
chmod 644 /www/wwwroot/yoursite.com/wp-config.php
# 目录统一 755,文件统一 644
find /www/wwwroot/yoursite.com -type d -exec chmod 755 {} \;
find /www/wwwroot/yoursite.com -type f -exec chmod 644 {} \;
宝塔用户可以在「文件」里右键该文件 →「权限」,把数字改成 644,并勾选「应用到子目录」时谨慎操作(子目录建议单独设 755)。
方法四:关闭调试模式并收紧数据库账号
生产环境务必关掉调试:
// wp-config.php —— 线上关闭调试,避免泄露路径信息
define( 'WP_DEBUG', false );
define( 'WP_DEBUG_DISPLAY', false );
define( 'WP_DEBUG_LOG', false );
排查数据库连接:给这个站点单独建一个数据库账号,而不是用 root;该账号只授予这个库的 SELECT, INSERT, UPDATE, DELETE 等必要权限,不要给 DROP、GRANT 等危险权限。这样即使出现注入,损失也被限制在单库内。
方法五:给 wp-config.php 加一层访问限制
在网站根目录 .htaccess 里禁止直接访问该文件:
<files wp-config.php>
order allow,deny
deny from all
</files>
另外把 wp-config.php 移到 wp-content 之外的上一级目录(WordPress 支持从上级目录读取)也是一种进阶做法,能进一步降低被直接命中的概率。
常见踩坑点
- 密钥替换时改乱了行。八组密钥必须一一对应,复制时漏行或错位会导致登录异常,务必整段替换、逐一核对。
- 误开
DISALLOW_FILE_MODS导致无法在线更新。它连插件更新一起禁掉,生产站如需在线更新就不要开,或用完后移除。
- 权限设成 777。图省事把
wp-config.php设 777,等于让任何脚本都能改它,是典型的反向操作。
- 改完不验证站点。修改配置后一定要复查首页和后台能否正常访问,别改完就走人。
- 忘记备份旧文件。动手前先复制一份
wp-config.php到本地,改坏了能立刻还原。
- 密钥换了却没检查多站点。多站点网络换密钥同样会强制全员重新登录,建议避开业务高峰操作。
总结
wp-config.php 是 WordPress 安全的第一道关卡,却常被站长忽视。把 DISALLOW_FILE_EDIT 打开,能堵住「拿到后台就能写后门」的捷径;定期更换八组安全密钥,能让被盗的登录 Cookie 立即作废;再配合 644 文件权限、关闭调试模式、使用最小权限数据库账号和 .htaccess 访问限制,整套配置层加固就成型了。这些改动都在一个文件里,花十分钟就能完成,收益却很长。做好 wp-config.php 安全加固,是每个站长都该尽早补上的一课。
