WordPressの501エラー、原因は本文の「CD」?エックスサーバーWAFの対処法

本サイトはアフィリエイト広告を利用しています。

WordPressで記事を編集中、突然「501 Not Implemented」というエラーが表示され、プレビューや更新ができなくなったことはありませんか?

私の環境では、記事本文に書いた「CD」という文字列を別の表現に変えたところ、エラーが出なくなったことがありました。

以前にも似たトラブルがあり、そのときはエックスサーバーのWAF設定を一時的にOFFにして対処しました。でも今回は、できればセキュリティ設定を変えずに解決したい。

そこで試したのが、記事の文章を書き換える方法です。

さらに、別の日にはPHPコードの保存時にも501エラーが発生しました。

この記事で紹介すること

  • 記事本文の「CD」を変更して501エラーを回避した体験
  • エックスサーバーのWAF設定と6つの対策項目
  • WPCodeでPHPコードを保存したときの別の501エラー
  • WAFをむやみにOFFにせず、原因を切り分ける方法

WordPressの記事編集中に501エラー。原因は本文の「CD」?

きっかけは、運営している英語学習ブログの記事を更新していたときのことでした。

英語絵本の読み聞かせ体験を紹介する記事で、音声教材について説明するために「CDの音声」「CDが付いていない英語絵本」といった表現を使っていました。

ところが、WordPressでプレビューしようとすると、501エラーが表示されてしまいます。

最初はWordPressやプラグインの不具合を疑いたくなりますが、以前も似た経験があったため、本文中の「CD」が気になりました。

そこで、表現を次のように変更してみました。

変更前 変更後
CDの音声 付属の音声
CDが付いていない英語絵本 音声が付いていない英語絵本

すると、エラーが出なくなり、プレビューできるようになったのです。

もちろん、これだけで「CDという2文字がWAFに検知された」と断定できるわけではありません。サーバーの検知ログを確認して、実際に反応したルールを特定したわけではないからです。

ただ、私の環境では、本文の表現を変えたことで501エラーを回避できたのは確かでした。

WordPressの記事が保存できないとき、原因の候補はサーバー設定やプラグインだけではない。本文の文字列も確認してみる価値があると感じた出来事でした。

なぜ本文の文字列でエラーになる?WAFの仕組み

今回、原因の候補として考えたのが、エックスサーバーのWAFです。

WAFは「Web Application Firewall」の略で、Webサイトへの通信内容を検査し、攻撃の可能性があるアクセスを遮断する仕組みです。

例えば、外部から不正な命令を送り込んだり、データベースを操作したりする攻撃を防ぐ役割があります。

ただし、通信の内容から危険性を判断するため、正常な操作が誤ってブロックされる可能性もあります。

「CD」とコマンド対策の関係は?

パソコンやサーバーで使われるコマンドには、cdというものがあります。

これは change directory の略で、作業するフォルダーを移動するときに使う命令です。

一方、エックスサーバーのWAFには、不正なコマンド実行を狙うアクセスを検知する「コマンド対策」が用意されています。

そのため、記事本文に含まれる文字列が、コマンドに関係するパターンとして判定されたのではないか、と考えました。

ここは推測の段階です。
エックスサーバーが「CD」の2文字そのものを検知する仕様だと確認できたわけではありません。周囲の文字列や送信内容も含めて判定された可能性があります。

また、今回問題になったのは「CD」でしたが、ほかの文字列でも同じようなエラーが起こる可能性はあります。

「CDを使わなければ大丈夫」という話ではありません。

記事を保存・更新するときだけエラーが出るなら、直前に追加した文章やHTMLも、原因を探る手がかりになるかもしれません。

なお、HTTPの「501 Not Implemented」は、本来、サーバーがリクエストの処理に必要な機能へ対応していないことを表すステータスコードです。

そのため、501エラーが表示されたという事実だけで、原因をWAFと決めつけることはできません。

参考:MDN Web Docs「501 Not Implemented」

エックスサーバーWAFの6つの設定項目

エックスサーバーのWAFには、次の6つの対策項目があります。

設定項目 主な役割
XSS対策 悪意あるスクリプトを含むアクセスへの対策
SQL対策 SQL文を利用したデータベースへの攻撃への対策
ファイル対策 サーバーの設定ファイルなどを狙う不正アクセスへの対策
メール対策 フォームなどを悪用した不正なメール送信への対策
コマンド対策 不正なコマンド実行を狙うアクセスへの対策
PHP対策 脆弱性につながる可能性があるPHP関数などを含むアクセスへの対策

今回の「CD」に関係している可能性を考えたのは、このうち「コマンド対策」です。

設定を確認するには、エックスサーバーのサーバーパネルで対象ドメインの「WAF設定」を開きます。

エックスサーバーのWAF設定画面。XSS対策、SQL対策、ファイル対策、メール対策、コマンド対策、PHP対策の6項目

各項目は個別にON・OFFを切り替えられますが、501エラーが出たからといって、6項目すべてをOFFにする必要はありません。

まずは、本文の言い換えなど、セキュリティ設定を変えずに試せる方法から確認したいところです。

なお、エックスサーバーの公式マニュアルによると、WAFの設定変更が反映されるまで最大30分程度かかる場合があります。変更直後に再試行しても、まだ以前の設定が適用されている可能性があります。

参考:エックスサーバー公式「WAF設定」

以前はWAFをOFF。でも今回は文章を変えて対処した

実は、本文の「CD」が関係していると思われるエラーは、今回が初めてではありません。

以前は、エックスサーバーのWAF設定で「コマンド対策」を一時的にOFFにして対処したことがありました。

確かに、作業を通すための方法のひとつではあります。

でも、WAFはそもそもWebサイトを攻撃から守るためのものです。

WordPressやプラグインのセキュリティを見直してきたこともあり、今回はできるだけWAFを有効にしたまま記事を更新したいと考えました。

そこで、本文の「CD」を別の言葉に置き換えてみたわけです。

今回のように、意味をほとんど変えずに言い換えられるなら、それで解決するほうが手軽です。

以前は文章をそのまま通すためにWAFを切った。
今回はWAFを残すために文章を変えた。

同じようなエラーでも、対処の仕方は変えられるのだと実感しました。

別のケースでは、PHPコードの更新でも501エラーに

実は、この記事を準備しているときにも、別の501エラーに遭遇しました。

今度は、WordPressのお問い合わせフォームのスパム対策です。

海外から営業メールが毎日のように届くため、Contact Form 7に「メッセージ本文にひらがなを含める」というチェックを追加することにしました。

PHPコードを管理できるWPCodeというプラグインを使い、設定を保存しようとしたところ、またしても501エラー。

こちらは文章の言い換えでは済まないため、エックスサーバーのWAF設定を確認し、「PHP対策」を一時的にOFFにして保存を試しました。

このときは「コマンド対策」もOFFにしていたため、実際にどちらの設定が関係していたのかまでは特定できていません。

その後、PHPコードを修正して保存し、問い合わせフォームのメッセージ本文にはひらがなを求めつつ、名前などはローマ字でも入力できるように調整しました。

同じ501エラーでも、記事本文を変更して解決したケースと、PHPコードの更新時にWAF設定の変更を試したケースがあるわけです。

セキュリティ対策を強化しようとしたら、セキュリティ機能に作業を止められてしまう。

少し皮肉な話ですが、こうしたときこそ、何をしている最中にエラーが出たのかを切り分けることが大切だと感じました。

WordPressで501エラーが出たときの確認手順

私の経験を踏まえると、501エラーが出たときは、次の順番で確認するのがよさそうです。

  1. どの操作でエラーになったかを確認する

    記事のプレビューなのか、保存・更新なのか。それともプラグインの設定やPHPコードの保存なのか。

    同じ501エラーでも、発生した操作によって調べる場所が変わります。

  2. 編集内容をバックアップする

    原因を調べる前に、未保存の文章やコードを別の場所へコピーしておきます。

    エラーが出たあとに画面を再読み込みすると、入力した変更内容が消える場合もあるためです。

  3. 記事の更新なら、最近追加した文字列を確認する

    特定の記事だけエラーになるなら、直前に加えた文章、英数字、HTMLなどを見直してみます。

    今回のように、意味を変えない範囲で別の表現に置き換えると、解決の手がかりになるかもしれません。

  4. WAF設定と関係がありそうか確認する

    エックスサーバーを利用している場合は、サーバーパネルのWAF設定を確認します。

    ただし、エラーの原因が分からないまま、すべての対策をOFFにするのは避けたいところです。

    WAFの影響が疑われ、どうしても一時的な設定変更が必要な場合は、変更対象をできるだけ限定します。

    設定変更後は反映状況を確認し、作業が終わったら元のONに戻して、正常に動作するか確認します。

  5. 原因を特定できなければ、サーバー側にも相談する

    同じエラーを繰り返す場合や、どのWAF設定が影響しているか分からない場合は、発生時刻、操作内容、エラー画面などを記録して、エックスサーバーのサポートに相談するのも方法です。

    WAF以外の原因も考えられるため、むやみに設定を変更し続けるより、状況を整理して確認するほうが安全です。

WordPressで501エラーが表示されると、何か大きなトラブルが起きたように感じます。

でも、今回の私のケースでは、本文の表現を少し変えるだけで解決できました。

一方で、PHPコードの保存時には、WAFの設定も確認する必要がありました。

大切なのは、501エラーを見てすぐにWAFを切るのではなく、何が原因になっていそうかを順番に調べること。

Webサイトを守るための機能と、日々の記事更新。その両方を大切にしながら、できるだけ無理のない方法で対処していきたいですね。

タイトルとURLをコピーしました