DISALLOW_FILE_EDIT 放哪里最正确?wp-config.php 写法与注意事项(含排错清单)

开启 DISALLOW_FILE_EDIT 的核心目的,是禁用 WordPress 后台的主题/插件文件编辑器(Theme/Plugin Editor),降低被盗号后“直接在后台塞恶意代码”的风险。它不影响 Elementor/Gutenberg 的可视化编辑,也不会阻止 FTP/SSH/面板对文件的修改。要让它真正生效,关键在于:写对位置、写对语法、确认没有被其他配置覆盖

图片[1]-DISALLOW_FILE_EDIT无效?wp-config写对了吗

1. DISALLOW_FILE_EDIT 最正确的放置位置

结论:放在站点根目录的 wp-config.php 里,且必须在这一行之前:

/* That's all, stop editing! Happy publishing. */

原因很简单:wp-config.phpWordPress 启动早期加载,DISALLOW_FILE_EDIT 需要在后台加载相关功能前就已经定义,否则可能出现“看似写了但没生效”的情况。

2. wp-config.php 标准写法(推荐模板)

wp-config.php 中找到下面这段(一般靠近文件底部):

/* That's all, stop editing! Happy publishing. */

然后把配置写在它的上面,例如:

define('DISALLOW_FILE_EDIT', true);

推荐你把它和其他安全相关项放在一起,例如:

/** Security hardening */
define('DISALLOW_FILE_EDIT', true);

3. 常见写错方式(导致无效或报错)

3.1 放在了注释下面(太晚加载)

如果你写在:

/* That's all, stop editing! Happy publishing. */
require_once ABSPATH . 'wp-settings.php';

这两行的下面,基本等于没用。

3.2 少了引号、少了分号、写成全角符号

必须是英文半角字符,且要有分号:

✅ 正确:

define('DISALLOW_FILE_EDIT', true);

❌ 错误示例:

define(DISALLOW_FILE_EDIT, true)   // 少引号
define('DISALLOW_FILE_EDIT', true) // 少分号
define('DISALLOW_FILE_EDIT', true); // 中文逗号

3.3 重复定义(可能被覆盖/报 Warning)

如果你或某些安全插件/托管环境已经定义过一次,再定义可能出现冲突。更稳的写法:

if (!defined('DISALLOW_FILE_EDIT')) {
    define('DISALLOW_FILE_EDIT', true);
}

4. DISALLOW_FILE_EDIT 到底会禁用什么?不会禁用什么?

4.1 会禁用

  • WP 后台的:
    • 外观 → 主题文件编辑器
    • 插件 → 插件文件编辑器

4.2 不会禁用

  • Elementor / Gutenberg 可视化编辑
  • 通过 FTP/SFTP/SSH/面板文件管理器改文件
  • 插件/主题安装与更新(这个要用 DISALLOW_FILE_MODS
  • 恶意代码通过漏洞写入文件(例如 uploads 写入 webshell)

5. 你可能还需要 DISALLOW_FILE_MODS(重要区分)

很多人开了 DISALLOW_FILE_EDIT,但仍出现“插件/主题被改、被插码”,原因是攻击发生在编辑器之外。如果你的运营流程允许(比如你用 Git/CI 部署),建议同时启用:

define('DISALLOW_FILE_MODS', true);

它会阻止:

  • 后台安装/更新/删除插件主题
  • 后台在线更新 WordPress 核心

⚠️ 注意:启用后你要用手动上传或部署来更新。

6. 如何快速确认是否生效?

6.1 后台界面检查(最直观)

图片[2]-DISALLOW_FILE_EDIT无效?wp-config写对了吗

开启后,后台一般会:

  • 看不到 Theme/Plugin Editor 菜单
  • 或进入编辑器会提示无权限

6.2 用代码/信息页确认(更可靠)

wp-config.php 写好后,清理缓存(页面缓存/对象缓存/CDN)再看结果。

如果你用安全插件/托管平台,有时会额外隐藏菜单导致误判,所以最好搭配“文件是否还能被后台编辑”来判断。

7. 写好仍“无效”的 8 个排错点(按优先级)

  1. 你编辑的不是正在运行的那份 wp-config.php
    多站点、子目录、软链接、面板路径错最常见。
  2. 站点有额外加载的配置文件覆盖
    例如某些主机把关键常量写进服务器级配置,或在早期引导里定义了同名常量。
  3. 你写在了 wp-settings.php require 之后
    位置不对。
  4. 有 MU 插件或安全插件在运行时定义/修改行为
    wp-content/mu-plugins/ 里可能有强制策略。
  5. 对象缓存/OPcache 导致代码看似没更新
    重启 PHP-FPM/清理 OPcache(如果你有权限),或等待缓存过期。
  6. 文件编码或隐藏字符导致 PHP 解析异常
    比如 BOM、复制粘贴带了不可见字符。
  7. wp-config.php 权限不合理
    太宽松也危险,太严格可能导致无法读取。一般建议 640 或 600(按你的运行用户与组)。
  8. 你以为是“编辑器还在”,其实是其他入口在改文件
    如果文件仍被插码,优先查 FTP/面板/SFTP、账号泄露、插件漏洞、uploads 执行等。

8. 安全建议:把“开关”变成“体系”

如果你的目标是降低被篡改风险,建议至少做这 5 件事:

  • 开启 DISALLOW_FILE_EDIT(防后台编辑器塞码)
  • 需要时开启 DISALLOW_FILE_MODS(防后台安装/更新写入)
  • 禁止 wp-content/uploads 执行 PHP(从源头砍掉常见上传链)
  • 所有管理员开启 2FA + 强密码 + 不复用密码
  • 做文件完整性监控(文件 hash 变更告警,比事后排查省很多)

9. 推荐配置组合

仅禁用编辑器:

if (!defined('DISALLOW_FILE_EDIT')) {
    define('DISALLOW_FILE_EDIT', true);
}

禁用编辑器 + 禁止后台改动文件(更强):

if (!defined('DISALLOW_FILE_EDIT')) {
    define('DISALLOW_FILE_EDIT', true);
}
if (!defined('DISALLOW_FILE_MODS')) {
    define('DISALLOW_FILE_MODS', true);
}

放置位置:都写在 /* That's all, stop editing! Happy publishing. */ 之前。


联系我们
教程看不懂?联系我们为您免费解答!免费助力个人,小企站点!
客服微信
客服微信
电话:020-2206-9892
QQ咨询:1025174874
邮件:info@361sale.com
工作时间:周一至周五,9:30-18:30,节假日休息
© 转载声明
本文作者:哇哇
THE END
喜欢就支持一下吧
点赞1114 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容