先日ワードプレスを最新版にアップデートしたら、ログインできなくなるという現象がありました。
ID、パスワード入力画面は表示されるのですが、ログインを実行すると403エラー(Forbiddenエラー)になりました。
困ったなと思ったのですが、対応策をググったら対処することができました。
忘備録として記録いたします。
疑問403 Forbiddenエラーってなに?
よくあるエラーとして、404 Not found(指定したページは存在しません。)があります。
403エラーってあまり見ないエラーです。
これってなんなのでしょうか?
まず調べてみました。
403エラーとは、サーバーが拒否した場合に発生するエラーです。
拒否する理由として主に以下のものがあります。
- アクセス権がない(パーミッションエラー)
- .htaccessの設定ミス
- ファイヤーウォールによる拒否
ただ、今回はアクセス権がないわけでもなく、.htaccessに不備があるわけでもありませんでした。
そもそもWPのフロントページは普通に表示されています。
パーミッション等の問題であれば、すべてのページがエラーになるはずです。
どうやらサーバーのファイヤーウォールにより、拒否されているようでした。
最近のサーバーには、「任意ファイヤーウォール」を設定できるものがあります。
今回もサーバー側でファイヤーウォール設定がONになっていました。
ファイヤーウォール拒否一覧の内容を見ると、ワードプレスのログイン処理が拒否されていました。
どうやら、原因はファイヤーウォールで間違いなさそうでした。
ファイヤーウォールをOFFにしてみたところ、無事ログインできました。
任意ファイヤーウォールなので、当然OFFにもできます。
ファイヤーウォールをOFFにしてWPにログインしてみたところ、無事ログインできました。
ファイヤーウォールOFFにするのは、少し抵抗がありますが、WPにログインできないことのほうが問題です。
二者択一状態であったため、WPにログインできる方を選択しました。
疑問:バージョンアップ前のWPだと問題なかったのに、なぜバージョンアップ後403エラーが出るようになったのだろう?
今回の403エラーは、WPのバージョンアップで発生するようになりました。
なんでだろう?
と思い、サーバーのブロック理由を調べたところ「リダイレクト防御」というようなことが書かれていました。
拒否URL等を見ると、以下のような記述がありました。
/wp-login.php?redirect_to=https・・・・
WPログイン画面のURLにパラメータで「redirect_to」と書かれています。
古いバージョンのWPにはこのパラメータは付加されていないので、WP最新版から追加されたパラメータのようです。
どうやら、WPはログイン時にリダイレクト処理が動作するようになったようです。このサーバーのファイヤーウォールでは、リダイレクト処理は無条件で拒否していたため、403エラーとなっていました。
ちなみにサーバーによってはエラーにならないケースもありました
現象が発生したサーバーとは別のサーバーで、ファイヤーウォールをONにしてWPログインテストしてみたところ、403エラーになりませんでした。
どうやら、サーバーのファイヤーウォールによって403エラーになる・403エラーにならないの違いがあるようでした。
サーバーのファイヤーウォールは、意図せぬ攻撃に強いですが、攻撃でない普通の処理もたまにブロックしてしまうことがあります。
その場合はファイヤーウォールをOFFするしか方法がありません。
自作プログラムであれば、ブロックされてしまう部分の処理を変えることもできますが、WPの場合はそれが難しいです。
なぜならば、WPは定期的にアップデートがかかるため、一時的に直してもアップデートで上書きされてしまうからです。
403エラーが出たときは、ファイヤーウォールをOFFにして現象が改善するかどうかを調べることが肝要であることを学びました。