WordPressで「更新に失敗しました。返答が正しいJSON〜」が出る場合の対策
![アイキャッチ画像](https://tech.aru-zakki.com/wp-content/uploads/2023/07/eyecatch12.jpg)
ワードプレス(WordPress)で新規投稿をした時、下書きを保存した時に「更新に失敗しました。返答が正しい JSON レスポンスではありません」と表示されて保存も投稿もできなくなりました。この現象がなぜ発生したかと、対策について記事にしました。
突然、エラーが出るようになった
ある日、WordPressで投稿しようとしたところ、「更新に失敗しました。返答が正しい JSON レスポンスではありません」というエラーが発生して投稿できなくなりました。
先日までできていたのに「なぜ?!」となり焦りました。
この現象についてネットで調べて見ると、WAF(Web Application Firewall)が原因っぽいことがわかりました。
![](https://tech.aru-zakki.com/wp-content/uploads/2023/06/tabbycat.png)
WAFとは、Webアプリケーションの脆弱性を悪用した攻撃からWebサイトを保護するセキュリティ対策の機能です。
WAFが原因かチェックするためにConohaWINGの管理画面から「サイトセキュリティ」→「WAF」を見て見ると、エラー(警告)がたくさんあることが確認できました。
エラーの内容は、「SQLインジェクションからの防御13(’–)」というものでした。
一時的な対処として、WAFをOFFにすることでエラーなく投稿を完了させることができました。
ただ、ずっとセキュリティ機能をOFFで使うのは心配だし、だからいって保存のたびにOFFにしてから保存するというのも面倒・・・
とりあえず、原因をさらに調べて見ることにしました。
![](https://tech.aru-zakki.com/wp-content/uploads/2023/06/tabbycat.png)
以下、対策方法を書きますが、あくまで「私の場合」これで直ったというだけで、全員がこれで直るとは限りませんので注意してください。
![a blue question mark on a pink background](https://tech.aru-zakki.com/wp-content/uploads/2024/04/ozubnc-6e2s.jpg)
原因の調査
原因を調べるために、ConohaWINGのセキュリティ画面をもう一度確認してみました。エラーの内容が「SQLインジェクションからの防御13(’–)」となっているので、SQLインジェクションの疑いがあるのが原因だとわかります。
なにが原因なのかを、調べるために、エラーとなった記事をコピーして、文章を削っては保存するという行為を繰り返してみました。
すると、
'name' : ['a', 'b', ... ]
と書かれた行でエラーが出ていることを確認できました。
SQLインジェクションでは、シングルクオート(’)を使った攻撃が行われます。どうやら、この行のシングルクオート(’)のせいでJSONエラーが発生しているようです。
さらに原因を特定する
さらに原因を特定するために、新規記事を作成すし、タイトルは「テスト」、記事にシングルクオーと(’)だけを書いて下書き保存をクリックしてみました。
すると、見事に「更新に失敗しました。返答が正しい JSON レスポンスではありません」というメッセージが現れるではないですか!
![タイトルがテストで、シングルクオーとだけの記事](https://tech.aru-zakki.com/wp-content/uploads/2024/04/image-1024x240.png)
「これまでずっと、こんなエラーは発生していなかったのになぜ?」と悩みました。
さらに原因を特定するためにConohaWINGのWAFのページをチェックしていた時に「表示切替」メニューに気付きました。
![表示切替メニュー](https://tech.aru-zakki.com/wp-content/uploads/2024/04/image-1-1024x199.png)
これを「ログ」から「除外中」に切り替えて見ると、なんかその他という設定があります。
![その他の画面](https://tech.aru-zakki.com/wp-content/uploads/2024/04/image-2-1024x124.png)
この行、どうやらIPアドレスを指定してWAFのセキュリティ機能をOFFしているようです。
ここで、1年近く前に、自宅のネットのIPアドレスを除外設定したことを思い出しました!
数日前にルータの電源を切ったのが原因
実は、数日前に古くなったテーブルタップを入れ替えを行いました。この時、フレッツ光のルーターの電源をOFFにしました。
我が家は固定IPではないので、ルータの電源をOFFにして再度ONにするとIPアドレスの割り当てが変わってしまいます。
1年以上電源を入れっぱなしで、この間ずっとIPアドレスが変わっていませんでした。
たしか、最初にConohaWINGを使い出したときに、「更新に失敗しました。返答が正しい JSON レスポンスではありません」というエラーが発生したために、IPアドレスを指定してWAFの除外を行なっていたのをすっかり忘れていたわけです。
![](https://tech.aru-zakki.com/wp-content/uploads/2023/06/tabbycat.png)
設定した時は、「IPアドレスが変わったらやり直ししなくては」と思っていましたが数ヶ月したらすっかり忘れていました。
ということで、IPアドレスが変わって除外対象から外れたことが原因でした。
WAFの除外設定する方法(IPアドレス)
.htaccess
に設定を追加する方法
IPアドレスを除外設定するには、.htaccessというファイルに以下を挿入します。
xxx.xxx.xxx.xxx
の部分には、IPアドレスが入ります。
<IfModule mod_siteguard.c>
SiteGuard_User_ExcludeSig ip(xxx.xxx.xxx.xxx)
</IfModule>
IPアドレスは、「使用中のIPアドレス確認」などのキーワードでGoogle検索などすれば確認することができますし、先ほどのConohaの「攻撃元IPアドレス」にも記載されています。
![](https://tech.aru-zakki.com/wp-content/uploads/2023/06/tabbycat.png)
攻撃元IPアドレスを参考にする場合は、日時なども確認して自分のアクセスであることを確認しましょう。
.htaccessの書き換え方法ですが、ConohaWINGの場合は、サイト管理→サイト設定→応用設定からアクセスすることが可能です。
![応用設定](https://tech.aru-zakki.com/wp-content/uploads/2024/04/image-3-1024x89.png)
書き換え後、保存すればエラーが出なくなりました。
![](http://image.moshimo.com/af-img/1762/000000030611.gif)
まとめ
すっかり忘れてしまっていましたが、自宅のネットワークからのアクセスだけWAFの除外とする設定をしていました。ルータの電源入れ直しでIPアドレスが変わったので、これが原因でJSONエラーが発生していたわけです。
IPアドレスは他人に割り振られるため、セキュリティホールになります。忘れずに更新しなければと思いました。
本当は固定IPが良いんですけどね。