サーバーのサポートの方のおかげで問題の原因が特定できたので記録として。
Xserverが対象ですが、他のサーバーでも同種の機能がある、あるいは独自に実装しているところも同じ問題があるのではと思います(独自でできるレベルならそもそも回避策を講じていそうですが)。
前提と起きた問題
前提は以下の通り。
- WordPress使用
- 投稿欄内に;とecho文がある
起きた問題は以下の通り。
- 公開/更新/プレビューを行うと501のエラー画面になる
- 自動保存にも失敗してエラーがでる
エラーは以下の通りです。
/wp-admin/admin-ajax.php:1 Failed to load resource: the server responded with a status of “501” ()
厳密にはechoだけではエラーにならないもようですが、echoの前にセミコロンがあればそれだけでエラーになります。
原因と解決法
原因は以下の通り。
- Xserverのサーバーパネル内の「WAF設定」でechoが禁止コマンドとして引っかかっていた
解決法は以下の通り。
- Xserverのサーバーパネル内の「WAF設定」で「コマンド対策」を「OFF」にする
なんのことはなく、以前試しで入れていた機能が原因だったので、その機能をOFFにしただけで解決できました。
自動でONになっている機能では無いはずなので、同じ問題でこまる人はほとんどいないと思います。
なお、「WAF設定」のページで以下のように書かれているので、echo以外も引っかかる単語はあるようです。
kill、ftp、mail、ping、ls 等コマンドに関連する文字列が含まれたアクセスを検知します。
設定項目の種類
WAF設定には以下のように多数の設定項目があるため、無効化するにしても必要に応じてOFFにしなくてはなりません。
- XSS(javascriptなどのスクリプトタグ)
- SQL(SQL構文に該当する文字列)
- ファイル(htpasswd htaccess httpd. conf等、サーバーに関連する設定ファイル)
- メール(to、cc、bcc等のメールヘッダーに関係する文字列)
- コマンド(kill、ftp、mail、ping、ls 等コマンドに関連する文字列)
- PHP(session、ファイル操作に関連する関数のほか脆弱性元になる可能性の高い関数)
PHPの部分では「ファイル操作に関連する関数」が含まれているため、fオープン(openで書くとこの記事も501エラーになります…)などもかけません。
結び
セキュリティ的には有益な機能だとは思います。
ただ、サンプルコードを載せるタイプのサイトでは記事の下書き保存もできないので、利用は避けた方がよいかもしれません。
3人がこの記事を評価
役に立ったよという方は上の「記事を評価する」ボタンをクリックしてもらえると嬉しいです。
連投防止のためにCookie使用。SNSへの投稿など他サービスとの連動は一切ありません。