WEBサイト制作

[WordPress]WAF導入で501エラー.公開・下書きできない原因と対処法

WordPressで記事を作成し、投稿しようと「公開」ボタンを押下した瞬間、「501エラー」が出現することがあります。これは、記事を新規で作成・公開する場合に限らず、既存ページを更新する際、下書きとして保存する際、様々な場面で起こりうる障害です。

なぜこの501エラーが発生するのか、どうすれば501エラーを解消することができるのか、原因と対処法をご紹介します。

501エラーとは

501エラーとは、正式に言うと「501 Not Implemented」。「501 Not Implemented」の意味は、サーバーに実装されていないリクエストを送ってしまったことにより、サーバーが「そのリクエストはサポートしていない」というレスポンスを返したということです。
これだけでは何を言っているのかわからないと思うので、詳しく説明します。(エラーについての説明なので、原因と対処法のみを知りたい人は飛ばしてください。)

501エラーが起こると、以下のような画面が表示されます。
以下の例はエックスサーバー(XSERVER)ですが、サーバーによって表示のされ方が異なります。

「501 Not Implemented」
アクセスしようとしたページは表示できませんでした。
このエラーは、実装されていないメソッドでのアクセスがあったことを意味します。
以下のような原因が考えられます。
・対応していないメソッド(MOVE/COPYなど)を使用した。

phpの仕組みを説明すると長くなってしまうので割愛しますが、私たちがWordPressで編集して投稿したものがネット上で見れるのは、「サーバー」にファイルをアップロードしているからです。テキストも記事も、更新も新規記事も、ファイルを送信することでサーバー上に蓄積されます。

そして、サーバーもまた、プログラムで動いています。メソッドという動作を意味するプログラムが無数にあり、リクエストという命令を送ることで、そのメソッドを呼び出す(使用する)ことができます。

私たちが記事を投稿または更新、下書きをするときボタンを押しますよね?これは、「これをサーバーにアップしてほしいんだけど、お願いできますか?終わったら、完了画面を出してください。」というリクエストをサーバーに対して送っているのです。そしてサーバーは、そのリクエストをもらった段階で、対応したメソッドを用い、テキパキと作業をしてくれます。問題がなく作業が終われば、あなたのリクエスト道理に完了画面へと遷移してくれます。

では、これを踏まえて先ほどの文面を読み替えていきましょう。

こちらエックスサーバーです。
501エラーが発生しましたので、ご報告いたします。
先ほど「ファイルをアップしてから完了ページに遷移してほしい」というご依頼を頂いたのですが、どうやらそのご依頼は、対応する手段を持ち合わせていないようで、お引き受けできかねます。
次のことにお心当たりはございませんか?
・私たちサーバーができない行為を要求していませんか?(MOVE/COPY)などのご依頼はお引き受けできかねます。

プログラミングを経験していない方は「アクセスしようとしたページは表示できませんでした。」という文言を見てわけがわからなくなってしまうかもしれません。私たちは「記事を更新したいだけなんだ!」と思うでしょうが、サーバー側が行うメソッド(仕事)は、「記事をアップロードする」「ページを遷移する」の大きく分けて2つあるのです。

「ページは表示できませんでした」という文言に着目せず、この一連の流れに失敗したと解釈してください。(「ページは表示できませんでした」という文言はエックスサーバーさんが勝手にそう表現しているだけです。)

つまり、501エラー(501 Not Implemented)とは、送られたリクエスト(指示)に対して、対応するメソッド(方法)がないことを伝える応答です。

501エラーが起こる原因:WAF

501エラーがなぜ起きる原因はさまざまありますが、WordPressに限った話で言うと、「WAF」が真っ先に思い浮かびます。

そもそも、リクエストに対して501が返ってくるのは極めて稀なケースで、例えば存在しないページに行こうとすると、404(NOT FOUND)が返ってきます。しかし、サーバーの段階で501エラーではじかれているということは、そのリクエストをサーバーが禁止・規制していると考えられます。

となると、ほぼ確実に「WAF」が原因になります。

WAFとは?

WAFとは、「Web Application Firewall」の略称で、Webアプリケーション(自サイトと考えてしまっても構いません)の脆弱性を狙った攻撃を拒否するためのセキュリティツールです。

分かりやすい画像があったので、お借りします。

C.C.

(引用:worldsky

このように、サーバーや私たちのWebサイトを守る仕組みはいろいろありますが、WAFはサーバーに最も近い位置で働くセキュリティツールです。

  • クロスサイトスクリプト……Webサイトにスクリプトを挿入され、情報を抜き取られる
  • バッファオーバーフロー……許容量以上のサイズのデータを送り、バグを誘発して悪意のある行動を滑り込ませる
  • SQLインジェクション……システムの隙をついてSQL文を流し込み、データベースを不正に操作する

これらを防いでくれるのが、WAFです。
基本的にはこれらを考慮したプログラムが組んであるのですが、脆弱性が見つかる可能性はどんなシステムでもあります。そんな時にWAFが最後の砦となって、攻撃を感知・ブロックしてくれます。(※WAFがなければ攻撃にさらされるということではありません。)

サーバーの設定でWAFをONにしていると501エラーが発生

エックスサーバーは、無料でWAFを設定することができます。WAFが使えるようになってから、セキュリティ対策のために一斉にWAFをONにしたと思います。そのため、エックスサーバー利用者の中で、501エラーが発生したという人が多く存在しています。

エックスサーバーでは、以下の6項目を設定することができます。

今回、エラーを引き起こすためにわざと記事に記入したのは、「cd」という文字列にリンクをさせたものです。

たとえば、

<a href=”https://se.mtsukasa.com”>c/d</a>

(cdにすると501エラーが起こるので、間に「/」を入れています。)

を入力して投稿・下書き保存・更新しようとすると、501エラーが発生します。これは上の6つのうち、「コマンド対策」に当てはまります。どういったアルゴリズムで検知しているのかわかりませんが、cdのコマンドといえばコマンドプロンプトなんかで使うカレントディレクトリを表示させるコマンドが有名ですよね。ファイル移動系に厳しいのかな……?とか想像しても私の知識量ではどうしようもありませんでした。

みなさん「CD」という文字にリンクをさせていませんか……?もしそうなら、それが原因で501エラーが出ていると考えられます。

501エラーを解決する対処法

501エラーが出た場合、かなり焦ることでしょう。でも、焦っていろんなことをして、結果、せっかく書いた記事を無駄にしてしまわないように、まずは記事のバックアップを取りましょう。テキストモードにして、全文をコピー、テキストエディタか何かにペーストして保存しましょう。
(WordPressの編集画面は自動的にバックアップを取ってくれているので、501画面からブラウザバック→バックアップから復元→コピペでテキストエディタにバックアップ。)

そして、安易に「WAFをOFFにする」なんて発想にならないでください。検索をしてHitする対処法はどれも「WAFをOFFにする」ですが、初手に「WAFをOFFにする」という選択をするのはナンセンスと言わざるを得ません。せっかくWAFを使えるのですから、使わせてもらった方がいいです。(WAFをOFFにするのは最終手段)

ではどうするかというと、「原因個所を突き止める」です。WAFのON/OFFを操作するより早くできるので、利便性の観点からもこちらをオススメします。

原因は十中八九リンクか画像

501エラーを引き起こすのは、十中八九リンクか画像です。普通の文章が501エラーになるのはまずないと思ってください。
(日本語でエラーはまずないので、テキスト編集モードでアルファベットがある個所に検討をつけてください。リンクや画像以外でも、アルファベットを使用している箇所があれば、そこを重点的に。)

これで、もうほとんど目星がついたのではないでしょうか。あとは、どれが原因かを確認していくだけです。リンクや画像がある部分を削除して、「プレビュー」を押してください。プレビューが501エラーなら、その個所は原因ではありません。プレビューは何回でも使えるので、501エラーを確かめるのはプレビューを使いましょう。
プレビューが501エラーではなくなった時、その時削除した要素の中に、原因が存在します。

あとは、文字列を変えてみたり、URLを変えてみたりして、何が原因だったかをさらに詳しく調べてみてください。なんで501エラーになるのかわからなくても、原因がどの文字列だったかが必ずわかります。アルファベットがあれば、まずはそこを疑ってください。

あとは、バックアップから元に戻して、原因を取り除いて終了です。

どうしても無理な場合もある

「WAFをOFFにする」をナンセンスと言いましたが、「WAFをOFFにする」ことでしか解決できない場合もあります。

上でも述べましたが、「cd」「CD」にリンクを付けると501エラーになってしまいます。エラー回避のために、まさか「シーディー」と記載するわけにもいきません。「CD→コチラ」という風に変え、「コチラ」にリンクを付ければ問題ありませんが、どうしても「CD」にリンクを付けたいこともあるでしょう。

その際、最終手段としてWAFをOFFにするしかありません。

最終手段:WAFをOFFにする

WAFのON/OFFには1時間くらいかかるので面倒ですが、OFFにして時間が経ってから記事を更新・保存・公開することで、501エラーを回避することができます。

WAFを利用しなくても、攻撃にやられることはほとんどないでしょう。WAFを実装しているサーバーがどれくらいあって、どれだけの割合が利用しているのかわかりません。しかし、少なくない数のWEBサイト運営者が未導入でしょう。

記事を更新してからWAFをONに戻してもいいですし、最終手段とは書きましたが、どんどん利用していい方法ではあります。ただし、WAFの意味を理解し、危険性を把握した上で行いましょう。501になるキーワードなどありましたら、シェアしてくれると嬉しいです。原因を突き止めて、それを避けていけるようになれれば一番良いですね。