WordPressのJSONレスポンスエラー対策【WAFチューニング編】
2024年1月31日
WordPressで記事を保存した時などに以下のような「更新を失敗しました。返答が正しいJSONレスポンスではありません」といったエラーが出て記事を保存できないケースがあります。
エラー内容
サーバによっては403 Forbiddenエラーだったり、記事保存時の上記のようなエラーだったりします。原因はWAFの誤認知がほとんどで以下の条件下で発生する事を確認できました。
発生する状況
- サーバにWAFが設定されている
- 記事保存時
- ブロックエディタを利用
- 英語の文章を入力時
※正確にはselect、and、orといったプログラムでよく使う単語が含まれている場合。
色々なケースがありますが、通常の記事では発生しない事もあるようです。※おそらくデフォルトの「投稿」はサーバ側がWAFのチューニングでホワイトリストに入れている事が多いのかもしれません。
原因となるWAFの誤認知の確認方法
発生したエラーが何かを調べるためにはサーバのWAFのログを確認してどのシグネチャでブロックされているのかを確認する必要があります。主に以下のものが一般的です。
- SQLインジェクション:sqlinj-〜*
- クロスサイトスクリプティング:xss-〜*
- OSコマンドインジェクション:oscmd-〜*
sqlinj-〜*のように1桁から2桁くらいの数字でシグネチャが出てきますが、その数字の内容がどういった内容なのかというのはブラックボックスになっています。※公開するとそれを狙われる可能性があるため。
注意点としてはシグネチャ以外にも時間、IP、URLといった情報もあるので疑わしいものと誤認知であるものと見極める必要があります。
例えば「夜中に見覚えのないIPからAPIのファイルにアクセスがあるもの」などは絶対許可を入れないようにしましょう。
WAFチューニング方法
SITEGUARDのプラグインのWAFチューニングサポートから設定する方法
ファイル名やシグネチャを指定※複数可能。オン、オフ切り替えも出来て簡単です。
.htaccess に書き込む方法
IPなどプラグインではできない指定も可能なのでこちらは上級者向けとなります。
以下は、例として「signature1」と「signature2」の2つのシグネチャを除外した場合の書式です。
<IfModule siteguard_module>
SiteGuard_User_ExcludeSig sql-1,sql-2
</IfModule>
クライアントワークの場合は常にセキュアな状態を保ちたいというニーズもあるかと思います。その場合は手間にはなりますが、SITEGUARDのプラグインから設定を行い、記事入力時のみオフにするという方法も有効です。