问题描述
我可以防止在我的 wordpress 网站上枚举用户名吗?我可以使用 WPScan 工具查看用户。
最佳解决方案
我在.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
。
更新 20.04.2017
我看到更多的”broken” 请求,甚至太愚蠢的人来运行一个简单的扫描。请求的网址如下所示:
/?author={num:2}
所以你可以将上面的规则扩展到:
RewriteCond %{REQUEST_URI} !^/wp-admin [NC]
RewriteCond %{QUERY_STRING} ^author=d+ [NC,OR]
RewriteCond %{QUERY_STRING} ^author={num
RewriteRule ^ - [L,R=403]
次佳解决方案
你不行
WPScan 工具是一种自动化实用程序,可利用 WordPress 的友好 URL 来确定用户名。 It will loop through 是作者的前 10 个可能的 ID,并检查 HTTP 响应中的 Location
标头以找到用户名。
以 http://mysite.url
为例…
WPScan 将检查 http://mysite.url/?author=1
。如果您的网站使用漂亮的永久链接,它将返回一个 301 重定向与 http://mysite.url/author/username
的 Location
标头。如果您的网站没有使用漂亮的永久链接,则会返回 200(OK) 状态,因此 WPScan 可以检查字符串 「用户名」,并提取用户名。
你可以做什么
首先,只是因为有人可以猜到你的用户名,并不意味着你的网站是不安全的。真的没有办法阻止某人以这种方式解析您的网站。
但是…
如果你真的关心这个,我会建议做两件事情:
- 关闭漂亮的永久链接。这将强制 WPScan 和类似的工具来解析用户名的网站内容,而不是依赖该 URL 。
- 强制用户设置不同的昵称。在网址中没有用户名的情况下,扫描工具会在 Feed /帖子内容中搜索 「用户名的帖子」 。如果您没有将用户名放在那里,那么它们就不能被篡改。
另一个选择是改变你的作者永久重写。有几种方法可以做到这一点,你可以使用 find a few on this site as well 。
第三种解决方案
您可以使用.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]
为我们工作很好
第四种方案
没有彻底测试这个,但我认为最好删除底层资源,而不是试图在 Web 服务器级别上围绕它构建墙壁。所以在 WP 术语中,将阻止它处理 author-related 查询变量。
if ( ! is_admin() ) {
add_filter(
'query_vars',
function ( $public_query_vars ) {
foreach ( array( 'author', 'author_name' ) as $var ) {
$key = array_search( $var, $public_query_vars );
if ( false !== $key ) {
unset( $public_query_vars[$key] );
}
}
return $public_query_vars;
}
);
}
PS 注意到这将完全杀死作者档案,这可能或可能不适合偏执狂级别:)
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。