首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >WordPress 安全第一步:防止用户名暴露

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

作者头像
Denis
发布2023-04-13 13:52:21
发布2023-04-13 13:52:21
53100
代码可运行
举报
文章被收录于专栏:WordPress果酱WordPress果酱
运行总次数:0
代码可运行

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

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

用户名是怎么暴露的

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

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

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

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

如何防止用户名暴露

1. 修改 user_nicename。

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

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

如果用户的 user_nicenameuser_login 是一样的情况下:

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

代码语言:javascript
代码运行次数:0
运行
复制
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 页面,防止用户名暴露。

代码语言:javascript
代码运行次数:0
运行
复制
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 中

代码语言:javascript
代码运行次数:0
运行
复制
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 中

代码语言:javascript
代码运行次数:0
运行
复制
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 安全

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 用户名是怎么暴露的
  • 如何防止用户名暴露
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档