最近在查看Limit Login Attempts
日志的时候,发现大量的登陆尝试,关键是登陆使用的用户名是正确的。感到很奇怪,用户名是如何泄漏的呢?
网上搜寻了一下,发现原来用户名是被WordPress
主动泄漏出来的。
WordPress
鼠标点击前台用户名,浏览器就会跳转到 https://www.mobibrw.com/author/username 这个链接,这样一来就直接暴露了登陆用户名,哪怕你已经在前台使用了昵称。这是个很大的安全隐患!
后台登陆用户名也可以这样查看到:https://www.mobibrw.com/?author=1,多用户的可以把 1 变为 2、3、4、5 等,就可以在地址栏查看到各个用户名。
为了避免暴露登陆用户名,我们需要配置禁止用户名显示。我们需要在当前使用的主题的functions.php
中增加如下函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
<?php /////////////////////隐藏用户名信息相关///////////////////// // 隐藏用户名 add_filter('author_link', function($link, $author_id, $author_nicename){ $author = get_userdata($author_id); if(sanitize_title($author->user_login) == $author_nicename){ global $wp_rewrite; $link = $wp_rewrite->get_author_permastruct(); $link = str_replace('%author%', $author_id, $link); $link = home_url(user_trailingslashit($link)); } return $link; }, 10, 3); // 原作者页直接404 add_action('pre_get_posts', function($wp_query) { if($wp_query->is_main_query() && $wp_query->is_author()) { if($author_name = $wp_query->get('author_name')){ $author_name = sanitize_title_for_query($author_name); $author = get_user_by('slug', $author_name); if($author) { if(sanitize_title($author->user_login) == $author->user_nicename){ $wp_query->set_404(); } } else { if(is_numeric($author_name)) { $wp_query->set('author_name', ''); $wp_query->set('author', $author_name); } } } } }); //修改body_class add_filter('body_class', function($classes) { if(is_author()) { global $wp_query; $author = $wp_query->get_queried_object(); if(sanitize_title($author->user_login) == $author->user_nicename) { $author_class = 'author-'.sanitize_html_class($author->user_nicename, $author->ID); $classes = array_diff($classes, [$author_class]); } } return $classes; }); //修改comment_class add_filter('comment_class', function ($classes) { foreach($classes as $key => $class) { if(strstr($class, 'comment-author-')) { unset($classes[$key]); } } return $classes; }); //禁用 REST API 过滤部分端点 //解决通过 https://www.mobibrw.com/wp-json/wp/v2/users 获取用户列表的问题 add_filter( 'rest_endpoints', function( $endpoints ){ if ( isset( $endpoints['/wp/v2/users'] ) ) { unset( $endpoints['/wp/v2/users'] ); } if ( isset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] ) ) { unset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] ); } return $endpoints; }); // -- END ---------------------------------------- ?> |