#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
。如果您的网站使用的是永久链接,它将返回带有Location
的http://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)。它不应该像带有其他任何无用参数的页面一样工作吗?
评论
我创建了一个插件来填补此漏洞,可在此处的Wordpress插件上找到它:wordpress.org/plugins/stop-user-enumeration