問題描述
我可以防止在我的 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。