我可以防止在我的wordpress网站上枚举用户名吗?我现在可以使用WPScan工具看到用户。

评论

我创建了一个插件来填补此漏洞,可在此处的Wordpress插件上找到它:wordpress.org/plugins/stop-user-enumeration

#1 楼

我在.htaccess中使用的一种简单解决方案:

RewriteCond %{REQUEST_URI} !^/wp-admin [NC]
RewriteCond %{QUERY_STRING} author=\d
RewriteRule ^ - [L,R=403]


它类似于@jptsetme的答案,但即使查询字符串为/?dummy&author=5且搜索模式为RewriteRule非常快:您经常会在正则表达式中看到一个捕获([0-9]*)。但是,当您不使用捕获的表达式时,就不需要浪费捕获的内存,并且第一个字符的匹配就足够了,因为您不想接受author=1b

更新2017年4月20日

我看到了来自那些甚至愚蠢到无法进行简单扫描的人发出的更多“中断”请求。所请求的URL如下所示:

/?author={num:2}


,因此您可以将上述规则扩展到:

#2 楼

您不能。
WPScan工具是一种自动化实用程序,可以利用WordPress友好的URL来确定用户名。它将遍历作者的前10个ID,并检查HTTP响应上的Location标头以找到用户名。例如,使用http://mysite.url ...
WPScan将检查http://mysite.url/?author=1。如果您的网站使用的是永久链接,它将返回带有Locationhttp://mysite.url/author/username标头的301重定向。如果您的网站使用的不是永久链接,则它将返回200(确定)状态,因此WPScan将在feed中检查字符串“按用户名张贴”并提取用户名。
您可以做什么
首先,仅因为有人可以猜测您的用户名,并不意味着您的网站不安全。而且实际上是无法阻止某人以这种方式解析您的网站的。

关闭漂亮的永久链接。这将迫使WPScan和类似工具解析用户名中的网站内容,而不是依赖URL。

强制用户设置其他昵称。如果URL中没有用户名,扫描工具将在供稿/帖子内容中搜索“按用户名发布的帖子”。如果您不打算使用用户名,那么就不能使用它们。

另一种选择是更改您的作者永久链接重写。您可以通过多种方式来执行此操作,并且可能在此站点上也可以找到一些方式。

#3 楼

尚未对此进行全面测试,但我认为最好删除基础资源,而不是尝试在Web服务器级别上围绕它构建隔离墙。因此,以WP术语来说,这将阻止它处理与作者相关的查询变量。适当的偏执狂级别:)

#4 楼

您可以使用.htaccess重写规则来防止此泄漏,但也应确保使用昵称,以避免泄露EAMann所述的可分析内容中的用户名。但重写规则有错字:
http://www.question-defense.com/2012/03/20/block-wordpress-user-enumeration-secure-wordpress-against-hacking

正确的规则还应该从重写的URL中删除查询字符串,否则您仍然会泄露用户名。看起来应该像这样:

# Stop wordpress username enumeration vulnerability
RewriteCond %{REQUEST_URI}  ^/$
RewriteCond %{QUERY_STRING} ^/?author=([0-9]*)
RewriteRule ^(.*)$ http://yoursite.com/somepage/? [L,R=301]


对我们来说很好。

#5 楼

我想补充一点,您也可以在nginx上执行此操作。检查:
»在nginx上阻止WordPress用户枚举-www.edwidget.name

作为一个补充说明,我想防止由WP Engine托管的网站上的用户名枚举,这限制了用户的访问低级nginx配置文件。但是,他们的控制面板中确实有一个“重定向规则”部分,可让您完成此操作。一段时间后,我设法找出最佳配置:

Redirect Name: // choose a description for the rewrite
Domain: // you *must* select a domain; "All Domains" will *not* work here!
Source: ^/$
Destination: /?


然后您需要展示Advanced Settings面板... br />
等等,您的用户名是安全的[r]!

#6 楼

我在htaccess中添加了以下内容,从而完全阻止了WPScan的用户枚举

# Stop wordpress username enumeration vulnerability
RewriteCond %{REQUEST_URI}  ^/$
RewriteCond %{QUERY_STRING} ^/?author=([0-9]*)
RewriteRule ^(.*)$ http://yourdomain.com [L,R=301]
RewriteCond %{QUERY_STRING} author=d
RewriteRule ^ /? [L,R=301]


我作为政府机构渗透测试人员的专业意见...值得增加枚举有关您网站的信息的难度。很少有人会拥有一个超越Google(脚本小子黑客)的网站。我们谈论的是分层安全性,每一层都增加了渗透尝试的时间和复杂性。每层还增加了黑客所需的技能。 WP上有一些非常好的应用程序防火墙。查找那些可以阻止IP地址重复的用户登录尝试或404的用户。该想法是让防火墙自动阻止IP的IP,这些IP扫描您的网站以查找不存在的页面或尝试重复登录到您的站点。一个好的功能还包括XSS和SQL注入阻止功能。考虑使用“技巧与窍门”总部的所有合一WP安全性,Peter,Ruhul,Ivy。它为新手和专家提供了不错的界面和功能。

#7 楼

除了.htaccess路由外,另一种替代方法是在您的子主题的functions.php中添加以下代码:使用以下命令将每个页面的用户名分配给其他名称(例如首页):

# Redirect author page to homepage
add_action( 'template_redirect', 'wpse_46469_author_page' );

function wpse_46469_author_page() {
    # If the author archive page is being accessed, redirect to homepage
    if ( is_author() ) {
        wp_safe_redirect( get_home_url(), 301 );
        exit;
    }
}


#8 楼

我知道这是一篇旧文章,但是为了将来参考,我也想添加我的解决方案。这只是您的主题的片段。它将保留所有内容并且可以正常工作,即使是作者存档也可以,但是它可以消除错误的枚举请求。 />
它将扫描URL,例如:functions.php

找到后,它将从查询var中删除author变量,因此不会对其进行查询。

如果您使用永久链接,那么这将使作者档案保持完整。另外,如果该URL类似于:author=1,它将仅显示/dummy?author=1的页面。 wordpress /

#9 楼

我想发表自己的见解:

RewriteCond %{REQUEST_URI} ^/$
RewriteCond %{QUERY_STRING} ^author= [NC]
RewriteRule (.*) ? [L]


第一行仅检测到主页。我会解释原因。此“用户枚举”功能仅在主页上有效,因此无需重写所有URL。

接下来,我们查找author=查询字符串。显而易见。

最后,我们只显示原始页面,没有任何阻止,重定向(301、302)或禁止(403)。它不应该像带有其他任何无用参数的页面一样工作吗?