WordPress 安全第一步:防止用户名暴露

前面 WordPress 用户的 user_login、user_nicename、display_name 和 nickname 有什么区别的文章已经介绍了 WordPress 用户的字段的关系。

今天开始介绍一下 WordPress 安全的最重要一步:防止用户名暴露。

WordPress 用户名是 user_login,然后还有个 user_nicename, 也可以说是 user 的 slug, 最长 50 个字符。

默认情况下,在用户注册的时候,直接过滤掉 user_login 一些不适合在链接中生成的字符,然后全部转成小写字母生成 user_nicename。

WordPress 怎么暴露用户名

因为默认情况下 WordPress 用户的 user_nicename 和 user_login 是一样的,这样只要通过下面三个方法猜测到 user_login,然后就可以暴力破解。

1. 作者的文章列表链接是:https://blog.wpjam.com/author/superdenis/,其中的 superdenis 是user_nicename。

2. 在 body 的 class 中,如果当前用户的作者页,也会出现用户的 user_nicename。

3. 和 comment 的 class 中,如果留言的用户也是当前站点的用户,也会出现用户的 user_nicename。

如何防止暴露用户名

1. 修改 user_nicename。

WordPress 后台没有提供修改的 user_nicename 的地方,「WPJAM 用户管理插件」已经实现了该功能。

2. user_login 不出现在作者的文章列表链接中

如果用户的 user_nicename 和 user_login 是一样的情况下:

作者文章链接使用 author_id 代替 user_nicename。

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);

}

}

}

}

});

3. user_login 不出现在 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;

});

4. user_login 不出现在 comment_class 中

add_filter('comment_class', function ($classes){

foreach($classes as $key => $class) {

if(strstr($class, 'comment-author-')){

unset($classes[$key]);

}

}

return $classes;

});

安全是最重要的,防止用户名暴露是 WordPress 最重要的一步,所以一定要重视。

WPJAM 用户管理插件 已经集上面所有的功能和相关代码,直接启用即可,点击阅读原文查看 WPJAM 用户管理插件的详细介绍。

未经允许不得转载:万道一 » WordPress 安全第一步:防止用户名暴露
莫要搞事情哦
你喜欢的人刚好也未喜欢你
张学友刘德华邓紫琪已关注
赞(0) 打赏

赏点小费吧客倌

微信扫一扫打赏