搜索全站
安全防护 8 分钟阅读

隐藏 WordPress 版本号防止信息泄露被针对性攻击

攻击者扫一眼源码就能知道你用的是旧版 WordPress,然后精准利用已知漏洞。本文教你删除 generator 版本标签、隐藏 readme.html、清理 ?ver 版本参数,把版本信息藏起来,有效降低被自动化扫描和针对性攻击命中的概率。

U
UFO_PF 2025-08-01 · 阅读 8 分钟
隐藏 安全防护
阅读提示
本文约 2,908 字,预计阅读 8 分钟。文中命令与配置均经过实测,可直接参考执行。

引言

很多人不知道,网站会「主动上报」自己用的 WordPress 版本号。访客按 Ctrl+U 查看源码,往往能看到一行 <meta name="generator" content="WordPress 6.x" />;直接访问 https://你的域名/readme.html 还会看到一个版本说明页;链接里也常带着 ?ver=6.x 这样的参数。这些信息对普通访客毫无意义,但对攻击者却是精准导航:他一旦发现你的版本对应某个公开漏洞,就能直接拿现成的利用脚本打你。隐藏版本号并不能修补漏洞本身,但它能让你不再是「一眼可辨的软柿子」,把大量自动化扫描挡在门外。本文给出一套只改 functions.php 就能完成的隐藏方案,并提醒别陷入「藏了版本就安全」的误区。

故障原因分析

  1. 核心会输出 generator 标签。WordPress 默认在 <head> 里通过 wp_generator 打印版本号,这是最主要的信息源。
  1. readme.html 明示版本。根目录的 readme.html 默认保留,打开就能看到 WordPress 版本和许可信息,等于把版本写在门口。
  1. 资源 URL 带 ?ver= 参数。WordPress 给核心脚本、样式附加版本参数用于缓存控制,其中就包含了版本号线索。
  1. RSS/Feed 里的 generator。订阅源、站点地图等也可能输出 WordPress 版本与相关标识。
  1. 攻击者沿版本查漏洞库。拿到版本号后,攻击者会在漏洞库比对,选择对应的旧版插件/核心漏洞利用,命中率大幅提高。

分步解决方案

方法一:先看看自己的版本暴露在哪些地方

浏览器打开网站首页,右键「查看网页源代码」,搜索 generator 和 ver=;再直接访问 https://你的域名/readme.html。把暴露点都记下来,方便改完后对照验证。

方法二:用 functions.php 移除 generator 与版本参数

把以下代码加入当前主题的 functions.php(强烈建议用子主题,避免主题升级后代码被覆盖):

// functions.php —— 隐藏 WordPress 版本信息

// 1) 移除 <head> 里的 generator 版本标签
remove_action( 'wp_head', 'wp_generator' );

// 2) 从样式和脚本的 URL 中移除 ?ver= 版本参数
function mimang_remove_version_query( $src ) {
    if ( strpos( $src, 'ver=' ) ) {
        $src = remove_query_arg( 'ver', $src );
    }
    return $src;
}
add_filter( 'style_loader_src', 'mimang_remove_version_query', 9999 );
add_filter( 'script_loader_src', 'mimang_remove_version_query', 9999 );

// 3) 移除 RSS/Feed 中的 generator 版本信息
add_filter( 'the_generator', '__return_empty_string' );

保存后刷新前台源码,generator 和 ?ver= 应该都消失了。如果是用代码片段插件(如 Code Snippets)也可以,不必改动主题文件。

方法三:处理 readme.html 与 license.txt

这两个文件平时没有任何用途,可以直接删除或改名:

cd /www/wwwroot/yoursite.com
mv readme.html readme.html.bak
mv license.txt license.txt.bak

或者用 .htaccess 拒绝访问:

<Files ~ "^(readme\.html|license\.txt|readme\.txt)$">
    Order Deny,Allow
    Deny from all
</Files>

注意:WordPress 升级时可能会重新生成 readme.html,所以升级后建议再检查一次并重复处理。

方法四:用安全插件统一处理

Wordfence、iThemes Security 等插件都内置「隐藏 WordPress 版本」的选项,勾选即可移除 generator、限制 readme.html 访问。懒得改代码的站长可以用插件一键完成,思路和上面一致。这类插件的好处是升级后仍持续生效,不必担心主题或核心更新把改动覆盖掉,适合不想频繁维护代码的人。

方法五:把真正的防护做到位

隐藏版本是「少给线索」,真正的安全靠的是「不给漏洞」:务必保持 WordPress 核心、主题、插件为最新版本,及时打补丁;删除不再使用的主题和插件;启用安全插件做扫描与防火墙。隐藏版本只降低被自动扫描命中的概率,绝不能替代更新与修复。

常见踩坑点

  1. 以为隐藏版本就安全了。这是最大的误区,版本藏得再好,漏洞没补一样会被打,更新永远比隐藏重要。
  1. 只删 generator,漏掉 ?ver=。源码里的 ?ver= 仍然是版本线索,要一并过滤。
  1. 直接改主题文件被升级覆盖。改 functions.php 一定要用子主题或代码片段插件,否则主题一更新就白改。
  1. 忘记 readme.html 会复活。WordPress 升级可能重新生成该文件,升级后要复查。
  1. 过滤 ?ver= 导致缓存失效。移除版本参数可能让浏览器缓存策略变化,改完若发现样式没更新,清一次缓存即可。
  1. 用了过时的「改主题头部版本注释」老办法。那只是改主题版本,不是 WordPress 版本,方向搞错了,真正要处理的是 generator 标签和核心的 ?ver=。
  1. 改了缓存插件缓存的页面却没清理。版本参数移除后,旧缓存页面里可能仍带着 ?ver=,记得清一次缓存再验证。
  1. 把子主题当摆设。若把过滤代码写进父主题,主题一升级就被覆盖,隐藏效果随之失效,务必放进子主题或代码片段插件。

总结

WordPress 默认会把版本号写在 generator 标签、readme.html 和 ?ver= 参数里,等于向攻击者递上一份「我的版本是几」的说明书。用 functions.php 移除 wp_generator、过滤样式脚本的 ver 参数、清掉 readme.html,再配合 Wordfence 等插件,就能把大部分版本线索藏起来,让自动化扫描难以精确命中。但要牢记:隐藏 WordPress 版本号只是降低被针对性攻击的概率,真正决定安全的是及时更新和修复漏洞。把「藏线索」和「补漏洞」两件事都做到,站点才算稳。

U
UFO_PF作者

专注 WordPress 生态的实战作者,内容以「可复制、可验证」为第一原则。

留下你的想法

邮箱地址不会被公开。带 * 的为必填项。