欢迎光临
我们一直在努力
扫描二维码在手机上浏览
WordPress相关

避免在评论处暴露你的 WordPress 管理员登录用户名

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

要彻底隐藏用户名,目前有三个办法去解决:

方法一:直接修改 WordPress 程序

  1. 大约在 wp-includes\comment-template.php 的 419 行,暴露管理员的登录用户名… 该函数内容如下:
    function get_comment_class( $class = '', $comment_id = null, $post_id = null ) {
        global $comment_alt, $comment_depth, $comment_thread_alt;
     
        $comment = get_comment($comment_id);
     
        $classes = array();
     
        // Get the comment type (comment, trackback),
        $classes[] = ( empty( $comment->comment_type ) ) ? 'comment' : $comment->comment_type;
     
        // Add classes for comment authors that are registered users.
        if ( $comment->user_id > 0 && $user = get_userdata( $comment->user_id ) ) {
            $classes[] = 'byuser';
            $classes[] = 'comment-author-' . sanitize_html_class( $user->user_nicename, $comment->user_id );
            // For comment authors who are the author of the post
            if ( $post = get_post($post_id) ) {
                if ( $comment->user_id === $post->post_author ) {
                    $classes[] = 'bypostauthor';
                }
            }
        }
     
        if ( empty($comment_alt) )
            $comment_alt = 0;

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

  2. 大约在 wp-includes\post-template.php 的 634 行,暴露管理员的登录用户名… 该函数部分内容如下:
    elseif ( is_author() ) {
        $author = $wp_query->get_queried_object();
        $classes[] = 'author';
        if ( isset( $author->user_nicename ) ) {
            $classes[] = 'author-' . sanitize_html_class( $author->user_nicename, $author->ID );
        $classes[] = 'author-' . $author->ID;
        }
    }

    其中该函数的第 5 行也暴露了博主的登录名,将这一行删掉或注释掉即可成功解决~

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

方法二:过滤掉 “Comment-Author-” 和 “Author-“

comment_class()函数里输出的 comment-author-test10 这个 class 去掉,也将body_class()函数里输出的 author-test10 这个类似的 class 去掉。因为这个是通过 functions.php 来解决的,所以不用担心 wordpress 程序升级的问题。方法是,将以下代码加入 functions.php 中,即可完事!

function lxtx_remove_comment_body_author_class($content){    
    $pattern = "/(.*?)([^>]*)author-([^>]*)(.*?)/i";
    $replacement = '$1$4';
    $content = preg_replace($pattern, $replacement, $content);  
    return $content;
}
add_filter('comment_class', 'lxtx_remove_comment_body_author_class');
add_filter('body_class', 'lxtx_remove_comment_body_author_class');

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

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

20161122:才发现其实老外早在 2010 年就发现了这个漏洞…

function lxtx_remove_comment_body_author_class( $classes ) {
    foreach( $classes as $key => $class ) {
        if(strstr($class, "comment-author-")||strstr($class, "author-")) {
            unset( $classes[$key] );
        }
    }
    return $classes;
}
add_filter( 'comment_class' , 'lxtx_remove_comment_body_author_class' );
add_filter('body_class', 'lxtx_remove_comment_body_author_class');

代码改自:《Small Security Hole in WordPress Comments

方法 2 的两段代码二选一哈~ 效果一样!

方法三:改为输出用户 ID 或用户昵称

function lxtx_change_comment_or_body_classes($classes, $comment_id){
	global $wp_query;
	$comment = get_comment( $comment_id );
	$user = get_userdata( $comment->user_id );
	$comment_author = 'comment-author-' . sanitize_html_class( $user->user_nicename, $comment->user_id );
	$author = $wp_query->get_queried_object();
	$archive_author = 'author-' . sanitize_html_class( $author->user_nicename, $author->ID );
	$archive_author_id = 'author-' . $author->ID;
	foreach ($classes as $key => $class) {
		switch ($class) {
			case $comment_author::
				// $classes[$key] = 'comment-author-' . sanitize_html_class( $comment->comment_author, $comment->comment_author );			    
			    $classes[$key] = 'comment-author-' . sanitize_html_class( $comment->user_id );
				break;
			case $archive_author:
			    // $classes[$key] = 'author-' . sanitize_html_class( get_the_author_meta( 'display_name' ), get_the_author_meta( 'display_name' ) );
			    $classes[$key] = 'author-' . sanitize_html_class( $author->ID );
			    break;
			case $archive_author_id:
				$classes[$key] = '';
				break;
		}
	}
	return $classes;
}
add_filter( 'comment_class', 'lxtx_change_comment_or_body_classes', 10, 4 );
add_filter( 'body_class', 'lxtx_change_comment_or_body_classes', 10, 4 );

注:注释的两行代码为替换成昵称,不了解可以不理会~~
来源:https://www.ilxtx.com/further-hide-your-wordpress-admin-username.html

THE END
历史上的今天
三月
4
    哇哦~~~,历史上的今天没发表过文章哦
标签
喜欢就支持一下吧!!!
点赞0打赏分享
版权声明
本站文章除注明转载外,均为本站原创或翻译,欢迎任何形式的转载,但请务必注明出处,尊重他人劳动。
转载请注明:文章转载自:灵阳星空 » 避免在评论处暴露你的 WordPress 管理员登录用户名
本文标题:避免在评论处暴露你的 WordPress 管理员登录用户名
本文日期:本文发表于 2020/03/04 13:13:12,最后更新于 2020/03/04 13:13:12,如内容失效,请反馈给我们,谢谢!
本文地址: https://www.jsksky.com/further-hide-your-wordpress-admin-username.html

网络臭虫

已发布426篇文章
吃得苦中苦,方为人上人,不卧薪藏胆,哪能苦尽甘来?点击进入我的网站了解更多有关我的信息。

评论 抢沙发

评论前必须登录!

 


觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏