Blog

WordPressのJSONレスポンスエラー対策

更新日:2025年3月11日|公開日:2024年1月31日

WordPressで記事を保存した時などに以下のような「更新を失敗しました。返答が正しいJSONレスポンスではありません」といったエラーが出て記事を保存できないケースがあります。

この記事の内容

エラー内容

サーバによっては403 Forbiddenエラーだったり、記事保存時の上記のようなエラーだったりします。原因はWAFの誤認知がほとんどで以下の条件下で発生する事を確認できました。

発生する状況

色々なケースがありますが、通常の記事では発生しない事もあるようです。※おそらくデフォルトの「投稿」はサーバ側がWAFのチューニングでホワイトリストに入れている事が多いのかもしれません。

原因となるWAFの誤認知の確認方法

発生したエラーが何かを調べるためにはサーバのWAFのログを確認してどのシグネチャでブロックされているのかを確認する必要があります。主に以下のものが一般的です。

sqlinj-*のように1桁から2桁くらいの数字でシグネチャが出てきますが、その数字の内容がどういった内容なのかというのはブラックボックスになっています。※公開するとそれを狙われる可能性があるため。

注意点としてはシグネチャ以外にも時間、IP、URLといった情報もあるので疑わしいものと誤認知であるものと見極める必要があります

例えば「夜中に見覚えのないIPからAPIのファイルにアクセスがあるもの」などは絶対許可を入れないようにしましょう

【解決策1】WAFチューニング

①SITEGUARDのプラグインのWAFチューニングサポートから設定する方法

ファイル名やシグネチャを指定※複数可能。オン、オフ切り替えも出来て簡単です。

「新しいルールを追加」でシグネチャを登録。ONやOFFも可能。
シグネチャは複数登録可能。ファイル名を指定することもできます。

②.htaccess に書き込む方法

以下は、例として「signature1」と「signature2」の2つのシグネチャを除外した場合の書式です。

<IfModule siteguard_module>
SiteGuard_User_ExcludeSig sql-1,sql-2 
</IfModule>

クライアントワークの場合は常にセキュアな状態を保ちたいというニーズもあるかと思います。その場合は手間にはなりますが、SITEGUARDのプラグインから設定を行い、記事入力時のみオフにするという方法も有効です。

【解決策2】管理画面からのアクセスは除外する

.htaccessを使えばIPなどプラグインではできない指定も可能なのですが、WordPress の管理画面(wp-admin)だけ WAF を無効化するという方法もあります。

/wp-admin/.htaccessを設置して以下を記載します。
※これをドキュメントルートに置くとサイト全体を無効かになります。また/wp-content/に設置するとその領域のみ無効化できます。

<IfModule mod_security.c>
    SecFilterEngine Off
    SecFilterScanPOST Off
</IfModule>

管理画面のみ WAF を無効化するため、セキュリティリスクを最小限に抑えられます。※一部サーバでは効果がない場合もあります。