如何正确地移除WordPress版本号
时间:2022年05月18日
/来源:网络
/编辑:佚名
如何正确地移除WordPress版本号
使用WordPress的博主都有一个普遍的意识,就是为了安全而移除WordPress的版本号,以免不良用心的人利用旧版本的漏洞对网站进行攻击。
WordPress会在前端代码head中加入以下代码(3.8是当前网站所使用的WordPress版本号):
<meta name="generator" content="WordPress 3.8" />
有很多方法可以移除WordPress添加的版本号信息,我们先看看几种常见的方式:
方法一(错误):修改WordPress源代码
修改wp-includes/defaults-filter.php,将其中的:
add_action('wp_head', 'wp_generator');
改成:
remove_action('wp_head', 'wp_generator');
相信现在已经没人还傻到去修改WordPress源文件来实现某种功能了吧?下次WordPress更新又得重新修改,实在是累!
方法二(错误):直接删除wp_head()
因为本文开头那段泄漏WordPress版本号的代码,一般是主题文件header.php中的wp_head()函数输出的,并且这个函数会输出一些无用的代码,所以有些人干脆来个痛快,直接把wp_head()函数删掉了事。只是他们没有想过,很多插件/主题会通过这个函数进行一些操作,删掉这个函数将使这些插件/主题无法工作。兴许,下次安装个插件,死活用不了还找不到原因呢!
方法三:remove_action
一个好的方法,也是绝大多数教程提供的方法,是在当前主题的functions.php中添加以下代码:
remove_action('wp_head', 'wp_generator');
这样就可以从网站的head中移除本文开头提到的那段含有版本号的代码。但是,这里我要打击一下各位,最近在露兜博客留言的使用WordPress的站长,几乎没有一个站点能够完全隐藏掉WordPress版本号。打开你们的feed源,如http://example.com/feed,有没有看到这个:
<generator>http://wordpress.org/?v=3.8</generator>
啊啊!3.8不就是WordPress的版本号吗?再随便看看你的一篇文章的网页源代码,是否会看到下面的几段类似代码呢:
<script type='text/javascript' src='/wp-includes/js/comment-reply.min.js?ver=3.8'></script>
<link rel='stylesheet' href='/wp-includes/css/admin-bar.css?ver=3.8' type='text/css' />
<link rel='stylesheet' href='//fonts.googleapis.com/css?family=Handlee&ver=3.8' type='text/css' />
呵呵,又见3.8,其实WordPress不仅会输出本文开头的那段代码,而且会在feed中输出版本号,另外,为了更新缓存,某些css和js结尾也会附上WordPress版本号(如以上第2-3行代码)。
方法四:正确方法
所以,我们还应该移除feed和js/css中的WordPress版本号,在当前主题的functions.php中添加以下代码:
// 同时删除head和feed中的WP版本号
function 78moban_remove_wp_version() {
return '';
}
add_filter('the_generator', '78moban_remove_wp_version');
// 隐藏js/css附加的WP版本号
function 78moban_remove_wp_version_strings( $src ) {
global $wp_version;
parse_str(parse_url($src, PHP_URL_QUERY), $query);
if ( !empty($query['ver']) && $query['ver'] === $wp_version ) {
// 用WP版本号 + 12.8来替代js/css附加的版本号
// 既隐藏了WordPress版本号,也不会影响缓存
// 建议把下面的 12.8 替换成其他数字,以免被别人猜出
$src = str_replace($wp_version, $wp_version + 12.8, $src);
}
return $src;
}
add_filter( 'script_loader_src', '78moban_remove_wp_version_strings' );
add_filter( 'style_loader_src', '78moban_remove_wp_version_strings' );
另外,在WordPress后台右下角也会显示WordPress版本号,leiming网友提供了:去除此版本号的代码。不过个人觉得,如果开放了后台,从后台的界面风格也很好判断WordPress的版本,毕竟从我使用WordPress至今,WordPress已经换过4次界面了。
blueionic反馈,WordPress安装目录下的readme.html也会泄漏版本,每次更新后记得删除。
网友提供了更多可能泄漏版本号的地方:
当然,如果你还发现有其他地方泄漏WordPress版本号,那么欢迎给我反馈。
在WP后台的右下方有版本号,在fuction.php中加入以下代码可消除:
add_filter('admin_footer_text', 'left_admin_footer_text');
function left_admin_footer_text($text) {
// 左边信息改成自己的站点
$text = '感谢访问XXXX';
return $text;
}
add_filter('update_footer', 'right_admin_footer_text', 11);
function right_admin_footer_text($text) {
// 隐藏右边版本信息
}
除了上面提到的,还有以下地方可能泄露版本号:
1.wp-login.php 头部代码含很多 ?ver=x.y
错误解决方法:在主题functions.php中添加代码限制用户必须输入特定地址才能访问登陆页面,如wp-login.php?guanjianci1=guanjianci2。注意!!!通过这种方法虽然可以限制用户登录,但当用户直接访问wp-login.php时,虽然看不到登陆框,但仍可看到头部的类似版本信息!
正确解决方法:用.htaccess或DNS商提供的服务禁止访问该文件。
2.评论提交时的错误提示信息及wp_die()函数产生的错误提示信息,通过源代码查看Style样式可大致获得版本信息。如果那些别有用心的人仔细看细节,那么甚至可以将版本号精确到小数点后1位。注意,这对于攻击者来说可能已经足够了。
错误解决方法:(仅)开启ajax评论。注意!!用户可以通过浏览器设置阻止javascript,那么当这种情况下提交评论时就必须经过wp-comment-post.php,如果攻击者在提交评论时输入非法邮箱地址等信息,那么他就可以通过提示页面的style样式推断版本号。
正确解决方法:开启ajax评论,删除wp-comment-post.php,避免主题代码中出现wp_die(),或使用第三方评论系统(如多说、友言、畅言)
使用WordPress的博主都有一个普遍的意识,就是为了安全而移除WordPress的版本号,以免不良用心的人利用旧版本的漏洞对网站进行攻击。
WordPress会在前端代码head中加入以下代码(3.8是当前网站所使用的WordPress版本号):
<meta name="generator" content="WordPress 3.8" />
有很多方法可以移除WordPress添加的版本号信息,我们先看看几种常见的方式:
方法一(错误):修改WordPress源代码
修改wp-includes/defaults-filter.php,将其中的:
add_action('wp_head', 'wp_generator');
改成:
remove_action('wp_head', 'wp_generator');
相信现在已经没人还傻到去修改WordPress源文件来实现某种功能了吧?下次WordPress更新又得重新修改,实在是累!
方法二(错误):直接删除wp_head()
因为本文开头那段泄漏WordPress版本号的代码,一般是主题文件header.php中的wp_head()函数输出的,并且这个函数会输出一些无用的代码,所以有些人干脆来个痛快,直接把wp_head()函数删掉了事。只是他们没有想过,很多插件/主题会通过这个函数进行一些操作,删掉这个函数将使这些插件/主题无法工作。兴许,下次安装个插件,死活用不了还找不到原因呢!
方法三:remove_action
一个好的方法,也是绝大多数教程提供的方法,是在当前主题的functions.php中添加以下代码:
remove_action('wp_head', 'wp_generator');
这样就可以从网站的head中移除本文开头提到的那段含有版本号的代码。但是,这里我要打击一下各位,最近在露兜博客留言的使用WordPress的站长,几乎没有一个站点能够完全隐藏掉WordPress版本号。打开你们的feed源,如http://example.com/feed,有没有看到这个:
<generator>http://wordpress.org/?v=3.8</generator>
啊啊!3.8不就是WordPress的版本号吗?再随便看看你的一篇文章的网页源代码,是否会看到下面的几段类似代码呢:
<script type='text/javascript' src='/wp-includes/js/comment-reply.min.js?ver=3.8'></script>
<link rel='stylesheet' href='/wp-includes/css/admin-bar.css?ver=3.8' type='text/css' />
<link rel='stylesheet' href='//fonts.googleapis.com/css?family=Handlee&ver=3.8' type='text/css' />
呵呵,又见3.8,其实WordPress不仅会输出本文开头的那段代码,而且会在feed中输出版本号,另外,为了更新缓存,某些css和js结尾也会附上WordPress版本号(如以上第2-3行代码)。
方法四:正确方法
所以,我们还应该移除feed和js/css中的WordPress版本号,在当前主题的functions.php中添加以下代码:
// 同时删除head和feed中的WP版本号
function 78moban_remove_wp_version() {
return '';
}
add_filter('the_generator', '78moban_remove_wp_version');
// 隐藏js/css附加的WP版本号
function 78moban_remove_wp_version_strings( $src ) {
global $wp_version;
parse_str(parse_url($src, PHP_URL_QUERY), $query);
if ( !empty($query['ver']) && $query['ver'] === $wp_version ) {
// 用WP版本号 + 12.8来替代js/css附加的版本号
// 既隐藏了WordPress版本号,也不会影响缓存
// 建议把下面的 12.8 替换成其他数字,以免被别人猜出
$src = str_replace($wp_version, $wp_version + 12.8, $src);
}
return $src;
}
add_filter( 'script_loader_src', '78moban_remove_wp_version_strings' );
add_filter( 'style_loader_src', '78moban_remove_wp_version_strings' );
另外,在WordPress后台右下角也会显示WordPress版本号,leiming网友提供了:去除此版本号的代码。不过个人觉得,如果开放了后台,从后台的界面风格也很好判断WordPress的版本,毕竟从我使用WordPress至今,WordPress已经换过4次界面了。
blueionic反馈,WordPress安装目录下的readme.html也会泄漏版本,每次更新后记得删除。
网友提供了更多可能泄漏版本号的地方:
当然,如果你还发现有其他地方泄漏WordPress版本号,那么欢迎给我反馈。
在WP后台的右下方有版本号,在fuction.php中加入以下代码可消除:
add_filter('admin_footer_text', 'left_admin_footer_text');
function left_admin_footer_text($text) {
// 左边信息改成自己的站点
$text = '感谢访问XXXX';
return $text;
}
add_filter('update_footer', 'right_admin_footer_text', 11);
function right_admin_footer_text($text) {
// 隐藏右边版本信息
}
除了上面提到的,还有以下地方可能泄露版本号:
1.wp-login.php 头部代码含很多 ?ver=x.y
错误解决方法:在主题functions.php中添加代码限制用户必须输入特定地址才能访问登陆页面,如wp-login.php?guanjianci1=guanjianci2。注意!!!通过这种方法虽然可以限制用户登录,但当用户直接访问wp-login.php时,虽然看不到登陆框,但仍可看到头部的类似版本信息!
正确解决方法:用.htaccess或DNS商提供的服务禁止访问该文件。
2.评论提交时的错误提示信息及wp_die()函数产生的错误提示信息,通过源代码查看Style样式可大致获得版本信息。如果那些别有用心的人仔细看细节,那么甚至可以将版本号精确到小数点后1位。注意,这对于攻击者来说可能已经足够了。
错误解决方法:(仅)开启ajax评论。注意!!用户可以通过浏览器设置阻止javascript,那么当这种情况下提交评论时就必须经过wp-comment-post.php,如果攻击者在提交评论时输入非法邮箱地址等信息,那么他就可以通过提示页面的style样式推断版本号。
正确解决方法:开启ajax评论,删除wp-comment-post.php,避免主题代码中出现wp_die(),或使用第三方评论系统(如多说、友言、畅言)
新闻资讯 更多
- 【wordpress教程】WordPress跟踪记录访客在网站的搜索词 优化网站内容和搜索体验03-31
- 【wordpress教程】Zibll子比主题的用户中心修改头像增加支持上传PNG图片文件03-31
- 【wordpress教程】wordpress报错429怎么办03-28
- 【wordpress教程】wordpress如何批量删除指定分类目录下的所有文章03-23
- 【wordpress教程】Wordpress 在文章内容的第二段后面插入广告03-03
- 【wordpress教程】WordPress纯代码禁止发表重复标题的文章03-03
- 【wordpress教程】给wordpress博客-VIEU主题评论框添加打字特效(其他主题类似)03-03
- 【wordpress教程】wordpress自动批量定时发布插件 DX-auto-publish02-08
热门文章
- 178Moban源码谈谈免费源码与收费源码的区别
- 2帝国CMS忘记后台登陆用户名、密码、认证码的解决方法
- 3帝国CMS(EmpireCMS) v7.5后台任意代码执行漏洞及具体修复方法
- 4帝国CMS和WordPress 哪个好?哪个适合建站?
- 5如何解决Discuz的密码错误次数过多请15分钟后登陆的问题
- 6帝国cms灵动标签取得内容和栏目链接地址
- 7emlog pro 注册码“开心”教程(如果有一天,emlog官方版 或者 emlog免费版 跑路了,那用户怎么办?)
- 8织梦CMS在nginx下设置伪静态方法(附nginx伪静态规则)
- 9帝国cms后台登录出现”您还未登录”怎么解决?
- 10帝国cms7.5忘记登录密码 和忘记登录认证码以及多次登录 失败被锁定解决办法