【WordPress】ログインID漏洩対策~ユーザー名を秘匿する~

WordPressではユーザー名をブラウザ上から取得できてしまうので、セキュリティの脆弱性となることがある。ユーザー名はそのままログインIDであることが多い。そのため、ユーザー名を秘匿し、ログインIDが漏洩しないように対策を実施する。

ログインID漏洩の仕組み

WordPressサイトは、ドメインの後に続けて/?author=1を追記することで、投稿者のアーカイブページへアクセスすることができる。

https://example.com/?author=1

このときの問題は、投稿者のアーカイブページのURLに、ログインIDが表示されてしまうことである。

https://example.com/author/ログインID/

そこで対策として、/?author=1を無効化し、アクセスがあっても404を返すようにカスタマイズする。

ソースコード

function authorArchiveRedirect() {
  if ((isset($_GET['author']) && $_GET['author']) || preg_match('#/author/.+#', $_SERVER['REQUEST_URI'])) {
    header('Location: /404/');
    exit;
  }
}
add_filter('author_rewrite_rules', '__return_empty_array');
add_action('init', 'authorArchiveRedirect');

コードの解説

(isset($_GET['author']) && $_GET['author'])

$_GET['author'] ?author=値 のクエリがリクエストされたか判定する。

preg_match('#/author/.+#', $_SERVER['REQUEST_URI'])

$_SERVER['REQUEST_URI']) でリクエストされた URL に /author/ が含まれているかを判定する。

header('Location: /404/');
    exit;

404ページへリダイレクトする。

add_filter('author_rewrite_rules', '__return_empty_array');

テンプレートタグ__return_empty_array()は、フィルターフックにフックし、空の配列を返す。なので次のように、

add_filter( 'author_rewrite_rules', '__return_empty_array' );

と設定すると、作成者のルールを空にして、リクエストがあっても404となる。

※リライトルールを追加した場合は、必ずパーマリンク設定で何も変更せずに変更を保存が必要。