避免用戶枚舉

避免Users Enumeration。

目錄

.htaccess

避免用戶名單被/?author=1一個個列舉出來,在.htaccess加入:

Stop User Enumeration in WordPress

Perishable Press
# Block User ID Phishing Requests
<IfModule mod_rewrite.c>
	RewriteCond %{QUERY_STRING} ^author=([0-9]*)
	RewriteRule .* http://example.com/? [L,R=302]
</IfModule>

來源的作者Jeff Starr另外還有開發nG系列等安全外掛,不但有效而且輕量。

回到目錄

SITEMAP

官方添加這功能將用戶表列出來真的有點莫名奇妙,排除掉wp-sitemap-users-1.xml

於function.php加入:

How to remove author sitemaps from WordPress

DUANE BLAKE
function remove_author_category_pages_from_sitemap($provider, $name)
{
    if ('users' === $name) {
        return false;
    }
    return $provider;
}
add_filter('wp_sitemaps_add_provider', 'remove_author_category_pages_from_sitemap', 10, 2);

回到目錄

REST API

總結:失敗

控制REST API(/wp-json/wp/v2/)對外連通功能。

6 ways to enumerate WordPress Users

GoSecure

上方的引用羅列了REST API的用戶名漏洞。

洩漏用戶名:

  • https://example.com/wp-json/wp/v2/users
  • https://example.com/?rest_route=/wp/v2/users

網路上很多是直接禁止REST API全部功能,不過WordPress不知道哪裡就調用了REST API,如果因此發生錯誤其實很難立刻察覺。

目前最佳方式還是在防火牆設定或進入資料庫將「user_nicename」更改為與「user_login」不同的字串。

例如,下述方式已知會妨礙古騰堡編輯器以及LiteSpeed Cache獲取Domain Key、圖片最佳化。

在function.php加入以下程式碼:

Disable default WordPress REST Endpoints #2338

WordPress 4.7.1 REST API still exposing users

function rest_only_for_authorized_users($wp_rest_server) {
    if ( !is_user_logged_in() ) {
        wp_die( 'UNAUTHORIZED ACCESS' );
    }
}
add_filter( 'rest_api_init', 'rest_only_for_authorized_users', 99 );

完全禁止非註冊用戶接觸REST API,但如上述所說會造成許多功能的缺失。


測試方案

Disable WordPress REST API Without a Plugin

Headwall WP Tutorials

此方案似乎可以很好地解決這個問題。

經測試需要修改兩處地方:

一、
$prefix = rest_get_url_prefix();
$users_path = '/' . $prefix . '/wp/v2/users';

改為

$users_path = '/wp/v2/users';

*$prefix = rest_get_url_prefix( );的刪除源於《Checks if the current request is a WP REST API request.》〈kagg-design所言〉。

二、
(isset($_REQUEST['rest_route']) && (strpos($_SERVER['rest_route'], $users_path) !== false))

改為

(isset($_REQUEST['rest_route']) && (strpos($_REQUEST['rest_route'], $users_path) !== false))

完成。

回到目錄

QUIC.cloud

如果是QUIC.cloud的用戶,.htaccess和REST API這兩項可以分別透過:

  • 「Block Author Scan」
  • 「Block WP API User List」

來達成,CDN會自動轉向ERROR 403。

*「Block WP API User List」似乎無法阻止以「https://example.com/?rest_route=/wp/v2/users」方式的用戶名枚舉。

回到目錄