【セキュリティ対策】WordPressでユーザー名を他者に特定されないようにする方法

今回は、「WordPressでユーザー名を他者に特定されないようにする方法」について紹介します。

W3Techsによると、WordPressは全世界のWEBサイトの43.1%のシェアを誇っています。

世界のWEBサイトの半数近くはWordPressを使っているので、外部からの攻撃の標的にされやすいです。

特にユーザー名は対策をしていないと、簡単に第三者に漏れてしまいます。

セキュリティ対策を強化するために、今回の記事を参考にして頂ければと思います。

WordPressでユーザー名を特定する方法と対策

WordPressでユーザー名を特定する方法は主に2つあります。

ユーザー名を特定されないようにする対策についても紹介するので、是非導入してみてください。

「/?author=1」をURLの最後につける

WEBサイトのトップページのURLの最後に「/?author=1」の文字列を追加してエンターキーを押してみてください。

対策していないWEBサイトだと、「/author/」の後ろにログイン時に必要なユーザー名が簡単に表示されてしまいます。

ユーザー名を特定されないようにするには、以下のコードをfunctions.phpに追加しましょう。

function disable_author_archive_query() {
  if( preg_match('/author=([0-9]*)/i', $_SERVER['QUERY_STRING']) ){
    wp_redirect( home_url() );
    exit;
  }
}
add_action('init', 'disable_author_archive_query');

これでホームURLを返すようになったので、ユーザー名が表示されなくなります。

「/wp-json/wp/v2/users」をURLの最後につける

WEBサイトのトップページのURLの最後に「/wp-json/wp/v2/users」の文字列を追加してエンターキーを押してみてください。

すると長い文字列が表示され、nameやauthorの値にユーザー名が表示されてしまいます。

これはWordPress4.7の以降に標準搭載されたREST APIという機能が原因で起きてしまう現象です。

対策としては、以下のコードをfunctions.phpに追加しましょう。

function my_filter_rest_endpoints( $endpoints ) {
  if ( isset( $endpoints['/wp/v2/users'] ) ) {
    unset( $endpoints['/wp/v2/users'] );
  }
  if ( isset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] ) ) {
    unset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] );
  }
  return $endpoints;
  }
add_filter( 'rest_endpoints', 'my_filter_rest_endpoints', 10, 1 );

そうすることで、「/wp-json/wp/v2/users」を追加してログインしても、ユーザー名が表示されなくなります。

まとめ

以上が、WordPressでユーザー名を他者に特定されないようにする方法」でした。

簡単に出来るセキュリティ対策なので、是非実践してみましょう!

大阪のWEB制作会社で働くコーダー。コーディングにハマり、気づいたらWEB制作を仕事にしていました。現在は新規のWEBサイト制作やWordPressカスタマイズしたり、当技術ブログを運営しています。