その他
記事内に商品プロモーションを含む場合があります

WordPressで「更新に失敗しました。返答が正しいJSON〜」が出る場合の対策

アイキャッチ画像
tadanori

ワードプレス(WordPress)で新規投稿をした時、下書きを保存した時に「更新に失敗しました。返答が正しい JSON レスポンスではありません」と表示されて保存も投稿もできなくなりました。この現象がなぜ発生したかと、対策について記事にしました。

突然、エラーが出るようになった

ある日、WordPressで投稿しようとしたところ、「更新に失敗しました。返答が正しい JSON レスポンスではありません」というエラーが発生して投稿できなくなりました。

先日までできていたのに「なぜ?!」となり焦りました。

この現象についてネットで調べて見ると、WAF(Web Application Firewall)が原因っぽいことがわかりました。

WAFとは、Webアプリケーションの脆弱性を悪用した攻撃からWebサイトを保護するセキュリティ対策の機能です。

WAFが原因かチェックするためにConohaWINGの管理画面から「サイトセキュリティ」→「WAF」を見て見ると、エラー(警告)がたくさんあることが確認できました。

エラーの内容は、「SQLインジェクションからの防御13(’–)」というものでした。

一時的な対処として、WAFをOFFにすることでエラーなく投稿を完了させることができました。

ただ、ずっとセキュリティ機能をOFFで使うのは心配だし、だからいって保存のたびにOFFにしてから保存するというのも面倒・・・

とりあえず、原因をさらに調べて見ることにしました。

以下、対策方法を書きますが、あくまで「私の場合」これで直ったというだけで、全員がこれで直るとは限りませんので注意してください。

a blue question mark on a pink background

原因の調査

原因を調べるために、ConohaWINGのセキュリティ画面をもう一度確認してみました。エラーの内容が「SQLインジェクションからの防御13(’–)」となっているので、SQLインジェクションの疑いがあるのが原因だとわかります。

なにが原因なのかを、調べるために、エラーとなった記事をコピーして、文章を削っては保存するという行為を繰り返してみました。

すると、

'name' : ['a', 'b', ... ]

と書かれた行でエラーが出ていることを確認できました。

SQLインジェクションでは、シングルクオート(’)を使った攻撃が行われます。どうやら、この行のシングルクオート(’)のせいでJSONエラーが発生しているようです。


さらに原因を特定する

さらに原因を特定するために、新規記事を作成すし、タイトルは「テスト」、記事にシングルクオーと(’)だけを書いて下書き保存をクリックしてみました。

すると、見事に「更新に失敗しました。返答が正しい JSON レスポンスではありません」というメッセージが現れるではないですか!

タイトルがテストで、シングルクオーとだけの記事
タイトルがテストで、シングルクオーとだけの記事

これまでずっと、こんなエラーは発生していなかったのになぜ?」と悩みました。

さらに原因を特定するためにConohaWINGのWAFのページをチェックしていた時に「表示切替」メニューに気付きました。

表示切替メニュー

これを「ログ」から「除外中」に切り替えて見ると、なんかその他という設定があります。

その他の画面

この行、どうやらIPアドレスを指定してWAFのセキュリティ機能をOFFしているようです。

ここで、1年近く前に、自宅のネットのIPアドレスを除外設定したことを思い出しました!

数日前にルータの電源を切ったのが原因

実は、数日前に古くなったテーブルタップを入れ替えを行いました。この時、フレッツ光のルーターの電源をOFFにしました。

我が家は固定IPではないので、ルータの電源をOFFにして再度ONにするとIPアドレスの割り当てが変わってしまいます

1年以上電源を入れっぱなしで、この間ずっとIPアドレスが変わっていませんでした。

たしか、最初にConohaWINGを使い出したときに、「更新に失敗しました。返答が正しい JSON レスポンスではありません」というエラーが発生したために、IPアドレスを指定してWAFの除外を行なっていたのをすっかり忘れていたわけです。

設定した時は、「IPアドレスが変わったらやり直ししなくては」と思っていましたが数ヶ月したらすっかり忘れていました。

ということで、IPアドレスが変わって除外対象から外れたことが原因でした。

WAFの除外設定する方法(IPアドレス)

.htaccessに設定を追加する方法

IPアドレスを除外設定するには、.htaccessというファイルに以下を挿入します。

xxx.xxx.xxx.xxxの部分には、IPアドレスが入ります。

.htaccessを書き換える場合は、バックアップすることをお勧めします

<IfModule mod_siteguard.c>
  SiteGuard_User_ExcludeSig ip(xxx.xxx.xxx.xxx)
</IfModule>

IPアドレスは、「使用中のIPアドレス確認」などのキーワードでGoogle検索などすれば確認することができますし、先ほどのConohaの「攻撃元IPアドレス」にも記載されています。

攻撃元IPアドレスを参考にする場合は、日時なども確認して自分のアクセスであることを確認しましょう。

.htaccessの書き換え方法ですが、ConohaWINGの場合は、サイト管理サイト設定応用設定からアクセスすることが可能です。

応用設定

書き換え後、保存すればエラーが出なくなりました。

まとめ

すっかり忘れてしまっていましたが、自宅のネットワークからのアクセスだけWAFの除外とする設定をしていました。ルータの電源入れ直しでIPアドレスが変わったので、これが原因でJSONエラーが発生していたわけです。

IPアドレスは他人に割り振られるため、セキュリティホールになります。忘れずに更新しなければと思いました。

本当は固定IPが良いんですけどね。

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

記事URLをコピーしました