新版 WordPress 企业建站指南上线,含 42 项上线检查清单 免费获取 →
安全加固 片段 002 安全 兼容 WP 3.0+

移除 WordPress 版本号

前台源码、RSS 输出、脚本和样式 URL 里都会暴露 WordPress 版本号。 攻击脚本会根据版本号匹配已知漏洞,抹掉这些信息能有效降低被自动化扫描命中的概率。

5,920 次复制 更新于 2026-09-12 4.9 (186 人评价)
functions.php · 12 行
// 移除 head 里的版本号
remove_action('wp_head', 'wp_generator');

// 移除 RSS 里的版本号
add_filter('the_generator', '__return_empty_string');

// 移除 ?ver= 参数
add_filter('script_loader_src', 'wpx_remove_ver');
add_filter('style_loader_src', 'wpx_remove_ver');
function wpx_remove_ver($src){
    return $src ? remove_query_arg('ver', $src) : $src;
}
粘贴到子主题 functions.php
5,920
累计复制
4.9/5
用户评分
12行
代码行数
3.0+
兼容 WP
完整代码 复制全部
functions.php · PHP
1
2
3
4
5
6
7
8
9
10
11
12
// 移除 head 里的版本号
remove_action('wp_head', 'wp_generator');

// 移除 RSS 里的版本号
add_filter('the_generator', '__return_empty_string');

// 移除脚本 / 样式 URL 的 ?ver= 参数
add_filter('script_loader_src', 'wpx_remove_ver');
add_filter('style_loader_src', 'wpx_remove_ver');
function wpx_remove_ver($src) {
    return $src ? remove_query_arg('ver', $src) : $src;
}
作用说明

WordPress 默认会在多个位置输出当前版本号:前台 HTML 的 <meta name="generator"> 标签、 RSS 订阅源的 generator 节点、以及脚本和样式文件 URL 后面的 ?ver= 参数。

这些信息本身不构成漏洞,但它给了攻击脚本「按图索骥」的便利。抹掉版本号属于纵深防御的一环, 真正决定安全的是及时更新核心、主题和插件,以及防火墙和备份策略。

降低扫描命中

自动化扫描脚本会优先尝试已知版本漏洞,没有版本号就少了一条线索。

轻微提速

去掉 ?ver= 参数后,部分 CDN 和浏览器的缓存命中率会略高。

无副作用

不影响前台显示、后台功能、插件运行,也不影响自动更新。

使用步骤 4 步
  1. 1

    确认已有子主题

    代码要放在子主题的 functions.php 里,直接改父主题文件的话,主题更新会覆盖你的修改。 如果还没建子主题,先看下面的教程。

    子主题创建教程
  2. 2

    打开子主题的 functions.php

    后台「外观 → 主题文件编辑器」里选择子主题的 functions.php; 或者用 FTP / 主机文件管理器打开 /wp-content/themes/子主题/functions.php。

  3. 3

    粘贴代码并保存

    把整段代码粘到文件末尾。注意检查不要粘在 ?> 后面, 也不要在开头遗漏 <?php 标签。 保存前建议先用本地编辑器格式化一下,避免粘贴错乱。

  4. 4

    清缓存后验证

    如果有缓存插件,先清一遍缓存。然后按下面的方法检查版本号是否已消失。

注意事项

  • 先去 ?ver= 会影响缓存刷新。某些 CDN 或浏览器缓存策略依赖这个参数判断文件是否变化。如果你站点启用了强缓存,每次更新主题或插件后可能需要手动清一次缓存。
  • 不能代替及时更新。移除版本号只是降低被扫描的概率,不修复任何漏洞。核心、主题、插件该更新还是要更新。
  • 部分安全扫描工具会报警。有些站点安全检测工具会因为你隐藏了版本号而给出提示,这是正常的,忽略即可。
  • 改前备份。改 functions.php 之前,先复制一份原文件到本地。万一出错,能立刻还原。
效果验证

改完后清一遍缓存,用下面的方法检查。三种检查都通过就说明生效了。

1 查看网页源码

在浏览器里打开首页,右键「查看页面源代码」,搜索 generator。

// 改之前

<meta name="generator" content="WordPress 6.8" />

// 改之后

(已消失)
2 检查 RSS 订阅源

访问 你的域名/feed/,搜索 generator。 应该看到空节点,或者完全没有这个标签。

3 检查脚本 URL

在页面源码里搜索 ?ver=。 应该看不到 WordPress 自己的脚本和样式带有这个参数(第三方插件的可能不受影响)。

常见问题
最常见的原因是 PHP 语法错误或者粘贴位置不对。用 FTP 打开 functions.php,检查是否有标签漏写或多余字符。 如果实在找不到,用备份的文件覆盖回去,网站立刻恢复。这也是为什么第 1 步要求先备份。
不会。这段代码只影响前台的输出版本号和脚本 URL 参数,不涉及自动更新机制。 后台的版本检查、更新推送完全正常。
这段代码的优先级是 10,只影响用标准 wp_enqueue_script 注册的脚本。有些插件用了自定义的加载方式,或者注册的时候把优先级设得更高, 就不一定被覆盖。如果要连插件的一起处理,可以把 add_filter 的第三个参数改成 999。
不能。这属于「降低被扫概率」,不是「防御」。真正防攻击的是这几件事: 及时更新、强密码 + 二次验证、登录限制、WAF 防火墙、每日备份。 这段代码是这些措施之外的补充,不是替代。

相关资源

看完这段代码,你可能还想看