当Webサイトのこのワードプレスで 501 Not Implemented という見かけないエラーが発生し、公開・下書きとして保存・更新・プレビューの表示ができなくなった。
原因は利用しているレンタルサーバーのXserver(エックスサーバー)で不正アクセス対策として設定したWAF(Webアプリケーションファイアウォール)だった。投稿テキストやスラッグに特定の文字が含まれていると、それらを不正として検知し遮断してしまったようだ。
501
Not Implemented
アクセスしようとしたページは表示できませんでした。
このエラーは、実装されていないメソッドでのアクセスがあったことを意味します。以下のような原因が考えられます。
対応していないメソッド(MOVE/COPYなど)を使用した。
今回いくつか試した結果、発生したエラーは以下の4パターンだった。
投稿テキスト内に「$_session」がある場合もエラーが発生。まだ調べてないけど恐らく『PHP対策』が反応している。とりあえず「$<!– –>_session」と書いて一時的に回避している。
501 Not Implemented エラーの発生条件
投稿テキスト内に特定の文字が存在する場合
投稿テキスト内に下記の文字列があったときに501 Not Implemented エラーが発生した。アルファベットは小文字でも大文字でもエラーに。
- 半角の「/etc/」という記述に『ファイル対策』が反応
- 半角の「;(セミコロン)」の後ろに「cc」があると『コマンド対策』が反応
- 半角の「cd」という記述に『コマンド対策』が反応
スラッグURLに特定の文字が存在する場合
- カテゴリーのスラッグに「etc」を設定し、「example.com/category/etc/」にアクセスすると501 Not Implemented エラーが発生。タグのスラッグに「etc」を設定し、「example.com/tag/etc/」にアクセスしても同様にエラー。
これで解決 501 Not Implemented エラーにならないWAF設定
WAFの設定を上から順にON、ON、OFF、ON、OFF、ONにしたらエラーが出なくなった。
設定項目 | 対策内容 | エラー原因 | 設定 |
XSS対策 | javascriptなどのスクリプトタグが埋め込まれたアクセスについて検知します。 | ON | |
SQL対策 | SQL構文に該当する文字列が挿入されたアクセスについて検知します。 | ON | |
ファイル対策 | .htpasswd .htaccess httpd.conf等、サーバーに関連する設定ファイルが含まれたアクセスを検知します。 | 「/etc/」 | OFFにする |
メール対策 | to、cc、bcc等のメールヘッダーに関係する文字列を含んだアクセスを検知します。 | ON | |
コマンド対策 | kill、ftp、mail、ping、ls 等コマンドに関連する文字列が含まれたアクセスを検知します。 | 「cd」 「;」+「cc」 |
OFFにする |
PHP対策 | session、ファイル操作に関連する関数のほか脆弱性元になる可能性の高い関数の含まれたアクセスを検知します。 | ON |
解除したWAFのかわりにBBQプラグインで防御
投稿テキスト内に「cc」や「cd」と書けないのは不便なので、XserverのWAF設定を一部解除する代わりにファイアーウォール機能を持つ Block Bad Queries (BBQ) プラグインで不正アクセス対策をする。
Block Bad Queries (BBQ) is a simple, super-fast plugin that protects your site against malicious URL requests. BBQ checks all incoming traffic and quietly blocks bad requests containing nasty stuff like eval(, base64_, and excessively long request-strings. This is a simple yet solid solution for sites that are unable to use a strong .htaccess firewall.
コメント