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となる。
※リライトルールを追加した場合は、必ずパーマリンク設定で何も変更せずに変更を保存
が必要。