author=1でログインIDがバレる件について

先日WordPressを最新にしてテーマも新しく入れ替えました。大変に気に入っているのですが、手を加えたい部分がどうしても出てきます。

色々とカスタムしているうちにauthorページは要らないなぁと思うようになりました。ログインIDは隠せたほうが良いですし対策することにしました。

.htaccessでURLを書き換える

mod_rewriteで対応しようかと思いましたが、WordPressの.htaccessはプラグインと共有しているので上書きされて消えてしまう可能性があるのでやめておきます。

functions.phpでリダイレクトさせる

authorのリクエストを404にリダイレクトするようにしました。単にリダイレクトするだけでは不明なURLの時とキャッシュ処理が異なるのでnocache_headers()を呼んで同じにしておきます。

add_action('template_redirect', function () {
    if (is_author()) {
        global $wp_query;
        $wp_query->set_404();
        status_header(404);
        nocache_headers();
    }
});

ところが、/?author=1でアクセスされるとログインID付きのURLにリダイレクトされてしまうので結局無駄でした。さらに、/wp-json/wp/v2/usersでもバレる事が判明!これはダメだと思い諦めました。

この際にログインのセキュリティについて考える

たまたまログインIDを隠せるなら対策しようと思いましたが、こんな仕組みなら却下です。セキュリティ対策は手間をかければ良い訳ではなく、いくつかの方法を吟味して組み合わせるのが良いです。ログインIDを晒したままでも大丈夫そうな方法を考えてみます。

キャプチャ

ログインの度に毎回入力するのが面倒になる。

フェールワンス

初回は必ず失敗するので、設定したのを忘れてしまった場合に困る。

総当たり攻撃を徹底ブロック

上記の2つの方法も総当たり攻撃に有効ですが、同一IPからの一定時間ブロック失敗時の遅延応答がかなり有効になります。しかもログインするときの手間も増えません。

セキュリティ対策のプラグイン

日本ではSiteGuard WP Pluginが非常に有名ですが、同じく国産のXO Securityが使いやすくて便利です。

パスワードは出来るだけ強固にしておく

  • 記号を混ぜる
  • 単語や個人情報の組み合わせは避ける
  • ある程度長くしておく
  • 他のサービスで使い回さない
  • クラウドなどにメモしない