如何正确的避免WordPress管理员登录用户名被暴露

投稿  龙笑天下 2016-11-02 阅读 164 次 评论 31 条

昨晚在研究评论结构时,网站右键查看源代码,无意间发现自己的管理员用户名被暴露了...

如何正确的避免WordPress管理员登录用户名被暴露

如上图,在博主的评论的class里看到的test10是我本地的测试网站的管理员的用户名!附:《使用PhpStudy 2016创建本地PHP测试环境及安装WordPress的方法

网站已经使用了《如何将WordPress作者存档链接中的用户名改为用户昵称或ID》这篇文章里的隐藏存档链接中管理员用户名的方法,没想到管理员用户名还能以另一种方式暴露了... 不过还好,非常隐蔽~~然后查看了下其它几个wordpress的博客,他们也全部中招了(话说,各位博主的管理员登录用户名真的好复杂啊!)!看来是wordpress的通病了!大家赶紧自查下哦~

修复方法

查了下代码,查到了这个函数comment_class(),进一步发现是被这个函数get_comment_class()(大约在wp-includes\comment-template.php 的419行)暴露管理员的登录用户名... 该函数内如如下:

  1. function get_comment_class( $class = ''$comment_id = null, $post_id = null ) {
  2.     global $comment_alt$comment_depth$comment_thread_alt;
  3.     $comment = get_comment($comment_id);
  4.     $classes = array();
  5.     // Get the comment type (comment, trackback),
  6.     $classes[] = ( emptyempty$comment->comment_type ) ) ? 'comment' : $comment->comment_type;
  7.     // Add classes for comment authors that are registered users.
  8.     if ( $comment->user_id > 0 && $user = get_userdata( $comment->user_id ) ) {
  9.         $classes[] = 'byuser';
  10.         $classes[] = 'comment-author-' . sanitize_html_class( $user->user_nicename, $comment->user_id );
  11.         // For comment authors who are the author of the post
  12.         if ( $post = get_post($post_id) ) {
  13.             if ( $comment->user_id === $post->post_author ) {
  14.                 $classes[] = 'bypostauthor';
  15.             }
  16.         }
  17.     }
  18.     if ( emptyempty($comment_alt) )
  19.         $comment_alt = 0;
  20.     if ( emptyempty($comment_depth) )
  21.         $comment_depth = 1;
  22.     if ( emptyempty($comment_thread_alt) )
  23.         $comment_thread_alt = 0;
  24.     if ( $comment_alt % 2 ) {
  25.         $classes[] = 'odd';
  26.         $classes[] = 'alt';
  27.     } else {
  28.         $classes[] = 'even';
  29.     }
  30.     $comment_alt++;
  31.     // Alt for top-level comments
  32.     if ( 1 == $comment_depth ) {
  33.         if ( $comment_thread_alt % 2 ) {
  34.             $classes[] = 'thread-odd';
  35.             $classes[] = 'thread-alt';
  36.         } else {
  37.             $classes[] = 'thread-even';
  38.         }
  39.         $comment_thread_alt++;
  40.     }
  41.     $classes[] = "depth-$comment_depth";
  42.     if ( !emptyempty($class) ) {
  43.         if ( !is_array$class ) )
  44.             $class = preg_split('#\s+#', $class);
  45.         $classes = array_merge($classes$class);
  46.     }
  47.     $classes = array_map('esc_attr', $classes);
  48.     /**
  49.      * Filter the returned CSS classes for the current comment.
  50.      *
  51. [email protected]
  52.      *
  53. [email protected]$classes    An array of comment classes.
  54. [email protected][email protected]es added to the list.
  55. [email protected]$comment_id The comment id.
  56. [email protected]$comment    The comment
  57. [email protected]|WP_Post $post_id    The post ID or WP_Post object.
  58.      */
  59.     return apply_filters( 'comment_class', $classes$class$comment_id$comment$post_id );
  60. }

我们的管理员用户名正是被其中的第14行暴露的... 在此,我们只需将这一行中的$user->user_nicename改为$user->user_id即可安全的隐藏管理员的登录名了~ 也隐藏了注册用户的登录用户名了!取而代之显示的是注册用户(包括管理员)的ID。从此再也不用担心网页中会暴露诸位站长的登录用户名了~

友情提示:此方法是直接修改的wordpress的源程序,所以每次更新wordpress程序都得进行这样的修改。希望高手能提供更好的方法!

11月04日补充更新:

经过张戈的提醒和龙砚庭博主文章的提示,得到了一个基本完美的解决方案:也就是将comment_class()函数里输出的comment-author-test10这个class去掉,也将body_class()函数里输出的author-test10这个类似的class去掉。因为这个是通过functions.php来解决的,所以不用担心wordpress程序升级的问题。方法是,将以下代码加入functions.php中,即可完事!

  1. /**
  2.  *(全网独家)如何正确的避免你的 WordPress 管理员登录用户名被暴露 - 龙笑天下
  3.  * http://www.ilxtx.com/further-hide-your-wordpress-admin-username.html
  4.  * 说明:直接去掉函数 comment_class() 和 body_class() 中输出的 "comment-author-" 和 "author-"
  5.  */
  6. function lxtx_comment_body_class($content){
  7.     $pattern = "/(.*?)([^>]*)author-([^>]*)(.*?)/i";
  8.     $replacement = '$1$4';
  9.     $content = preg_replace($pattern$replacement$content);
  10.     return $content;
  11. }
  12. add_filter('comment_class', 'lxtx_comment_body_class');
  13. add_filter('body_class', 'lxtx_comment_body_class');

comment_class()和body_class()过滤的结果分别是:

  1. // comment_class()过滤后的结果如下,去掉了原有class里的comment-author-test10,请和上面的图1比较
  2. class="comment byuser  bypostauthor odd alt thread-odd thread-alt depth-1"
  3. // body_class()过滤后的结果如下,去掉了原有class里的author-test10和author-1,请和上面的图2比较
  4. class="archive author  logged-in"

延深阅读

我们在上面看到了这个关键字user_nicename,然而通过百度搜索,找到的准确的相关信息聊聊无几... 还是通过科学上网用谷歌搜索是找到了相关的文章:《users - user_login vs. user_nicename - WordPress Development Stack Exchange》。

(英语蹩脚,请见谅~)大意是说,user_login 是登录名,用来登录的;user_nicename 是在作者存档链接中显示的名称。通常,如果你的登录名中没有特殊的字符,则 user_nicename 和 user_login登录名是一样的;但,如果你是使用电子邮箱注册的 wordpress,也就是说你的登录名是邮箱地址的话,则 user_nicename 和 user_login 是不同的!

比如,如果你的 user_login登录名是 [email protected],那么你的 user_nicename 则是 userexample-com。


Boke112提示:

大家修复问题后,为了安全起见,可以考虑修改我们的管理员登录用户名,具体方法请移步:三种方法修改WordPress默认用户名admin

经研究代码发现,这个暴露用户名的只是显示在li的class里,我们只需要给这个li赋予一个class值就能堵住这个漏洞。以Nana主题为例,打开主题文件inc\functions\ comment-template.php,大概在第10行,找到以下代码:

  1. $tag = 'li';

替换为:

  1. $tag = 'li class="wu"';

即可堵住这个泄露管理员用户名的漏洞,这样就不用修改WordPress源程序了。

本文地址:http://boke112.com/3622.html
关注我们:请关注一下我们的微信公众号:扫描二维码,公众号:aiboke112
温馨提示:文章内容仅代表作者个人观点,不代表boke112导航赞同其观点和对其真实性负责!
版权声明:本文为投稿文章,感谢 龙笑天下 的投稿,版权归原作者所有,欢迎分享本文,转载请保留出处!
WordPress免费响应式主题:Nana
CPA教学与引流技巧

发表评论

呲牙憨笑坏笑偷笑色微笑抓狂睡觉酷流汗鼓掌大哭可怜疑问晕惊讶得意尴尬发怒奋斗衰骷髅啤酒吃饭礼物强弱握手OKNO勾引拳头差劲爱你

表情

  1. 靠谱学生兼职网
    靠谱学生兼职网 【镇长】 @回复

    这个方法实用,后台登陆名这个问题要好好反思重视一下了。

  2. Koolight
    Koolight 【省长】 @回复

    好深奥,还没解决温饱,你们的小康我觉得好遥远。

  3. 姜辰
    姜辰 【市长】 @回复

    以后如果转WP可以学学

  4. 明月登楼
    明月登楼 【总理】 @回复

    感觉还是启用wordfence插件来提升WP的安全系数是王道!

  5. 金榜台博客
    金榜台博客 【县长】 @回复

    来看看,感谢分享

  6. 阅乎之
    阅乎之 【队长】 @回复

    好久没来了,看看新博客!

  7. 憧憬Licoy
    憧憬Licoy 【队长】 @回复

    另外把后台地址加密也能够提高安全防范

  8. 唯历史
    唯历史 【总理】 @回复

    你这研究挺深的

  9. 网际电脑
    网际电脑 【县长】 @回复

    用户名被暴露流量更大?

  10. 橘子书
    橘子书 【镇长】 @回复

    [偷笑] 已找到更便捷的方法,哈哈!谢谢天下。

  11. videoclub
    videoclub 【省长】 @回复

    这个是很有用的

  12. 西狂
    西狂 【镇长】 @回复

    我的网站好像没有这个问题,是不是和主题有关?

    • boke112导航
      boke112导航【站长】 @回复

      @西狂 刚才看了,你的也中招了,你对于前端管理员评论查看元素,你就会发现comment byuser comment-author-你的用户名 bypostauthor odd alt depth-2

  13. 我爱动感单车网
    我爱动感单车网 【省长】 @回复

    等问题出现之时再做处理,目前实在不想弄七弄八,很耗费精力。

  14. 管家婆
    管家婆 【镇长】 @回复

    这就很牛了

  15. 靠谱学生兼职网
    靠谱学生兼职网 【镇长】 @回复

    很有用的技术贴,回头要改改自己的用户句了

  16. 明月登楼
    明月登楼 【总理】 @回复

    那种暴力破解的攻击每天都要来骚扰我N次,不断的测试我的管理员账号名字!

  17. 龙笑天
    龙笑天 【县长】 @回复

    我的主题木有那个,只能修改wordpress程序了….

    • boke112导航
      boke112导航【站长】 @回复

      @龙笑天 [呲牙] 主题没有这个评论模板的话就按照你说的方法其实也简单的

  18. 捌零男人
    捌零男人 【镇长】 @回复

    还好用的多说

  19. 真我风采
    真我风采 【农民】 @回复

    这个确实应该注意。