投稿記事から(ログイン)ユーザー名がバレるのを防ぐ

WordPressで記事を投稿すると、「Posted on (日付) by ((ログイン)ユーザー名)」と表示されて、(ログイン)ユーザー名がわかってしまう。(ログイン)ユーザー名がわかるとパスワード総当たりで狙われる可能性が高まるなどセキュリティ上望ましくないので、(ログイン)ユーザー名を表示させない方法(非表示にする方法)を調べてみた。

(ログイン)ユーザー名がUSERNAMEの場合、「(サイトURI)/author/USERNAME」で記事を表示させることができ、あるいは「(サイトURI)/?author=1」のようにしても記事を表示させることもできる。「author=1」の1はauthor ID。1以外の数値になることもある。author IDがわからなくても1から順番に変えて試していき、該当する(ログイン)ユーザー名があれば、「(サイトURI)/author/((ログイン)ユーザー名)」にリダイレクトされてしまい、(ログイン)ユーザー名がバレる。なので、(ログイン)ユーザー名で表示させる場合とAuthor IDで表示させる場合の両方について対策する必要がある。

(1)「(サイトURI)/author/(ログイン)ユーザー名」のページそのものをなくす。
使用しているテーマ(子テーマ)のfunctions.phpに下記を追記する。追記後、管理画面のパーマリンク設定画面を開き、何も変更せずに変更保存ボタンを押して、パーマリンクを更新する。パーマリンク更新後は、「(サイトURI)/author/(ログイン)ユーザー名」でアクセスすると、「404エラー(ページがありません)」が表示される。

add_filter( 'author_rewrite_rules', '__return_empty_array' );

(2)Author IDでアクセスした時にフロントページ(ホームページ)へリダイレクトさせる。
使用しているテーマ(子テーマ)のfunctions.phpに下記を追記する。ブラウザのアドレスバーに「(サイトURI)/?author=1」のように入力して送信する場合(GETメソッド)、フォーム画面から送信する場合(POSTメソッド)のどちらの場合にも対応できるようにする。POSTメソッド時のauthorチェックは、もしかしたら副作用があるかも。

function author_id_redirect() {
    if($_GET['author'] !== null) {
         wp_redirect( home_url() );
         exit;
    }
    if($_POST['author'] !== null) {
         wp_redirect( home_url() );
         exit;
    }
}
add_action('init', 'author_id_redirect');

(3)投稿記事表示時に(ログイン)ユーザー名が表示されないようにする。
使用しているテーマ(子テーマ)で、(ログイン)ユーザー名を表示している箇所、すなわち投稿記事(post)のmetaデータを表示している箇所を探し、HTMLに出力しないように修正する。HTMLに出力している箇所はテーマによって異なるものの、関数名にpost_metaやposted_onが含まれているものを探し、そこからたどると効率的に見つけられる。なおCSSで(ログイン)ユーザー名を非表示にしても、HTMLのソースコードを見ればバレてしまい意味がないので、あくまでもHTMLに出力しないように修正する。

(4)その他
(ログイン)ユーザー名は、自分しかわからない、推測が困難なものに変更しておく。「admin」のように推測容易なものだと、パスワード総当たりで狙われる危険が非常に高まる。上記(1)から(3)の方法によらず、「Edit Author Slug」プラグインをインストールして、「(サイトURI)/author/(ログイン)ユーザー名」の(ログイン)ユーザー名を他の文字列に変更することも可能。

参考にした記事
http://gatespace.jp/2012/05/16/author-archive-rewrite-rule/

http://ga.nullppon.net/section/wordpress/ga/ga218

http://kwski.net/wordpress/1027/

https://ja.forums.wordpress.org/topic/12262

スポンサーリンク
スポンサーリンク
error: Content is protected !!