WAFにmod_securityを使い、ルールとしてOWASP を使用してWordpressを攻撃から守る場合、デフォルトのルールのまま使うと、Wordpressで記事保存する時に「返答が正しい JSON レスポンスではありません」というエラーが発生しました。これは、OWASPのルールID 949110 に引っかかってしまっているようで、WAFのログにも以下のような出力が見られ、記事保存時のアクセスがWAFによって怪しいアクセスと認識されたのが原因でした。
ModSecurity: Access denied with code 403 (phase 2). Matched "Operator `Ge' with parameter `5' against variable `TX:ANOMALY_SCORE' (Value: `10' ) [file "/~省略~/ REQUEST-949-BLOCKING-EVALUATION.conf"] [line "80"] [id "949110"] [rev ""] [msg "Inbound Anomaly Score Exceeded (Total Score: 10)"]~省略~
これを回避するには、上記949110のルールを削除するのも手の一つですが、本当の攻撃が防げなくなる可能性もあり、あまり好ましくありません。
回避するには、OWASPの設定ファイル crs-setup.conf のWordpress向けの設定を有効にしましょう。
具体的には、上記ファイル内のルール ID : 900130 がデフォルトで以下のようにコメントアウトされた状態で書かれています。
#SecAction \ # "id:900130,\ # phase:1,\ # nolog,\ # pass,\ # t:none,\ # setvar:tx.crs_exclusions_cpanel=1,\ # setvar:tx.crs_exclusions_drupal=1,\ # setvar:tx.crs_exclusions_dokuwiki=1,\ # setvar:tx.crs_exclusions_nextcloud=1,\ # setvar:tx.crs_exclusions_wordpress=1,\ # setvar:tx.crs_exclusions_xenforo=1"
これを以下のように修正します。
SecAction \ "id:900130,\ phase:1,\ nolog,\ pass,\ t:none,\ setvar:tx.crs_exclusions_wordpress=1"
あとは、WAFで設定ファイルをリロードすれば、無事Wordpressで記事保存ができるようになりました。