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

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

アイキャッチ画像
Aru

WordPressで新規投稿や下書き保存をしようとした際に、「更新に失敗しました。返答が正しいJSONレスポンスではありません」というエラーメッセージが表示され、保存や投稿ができなくなる問題が発生しました。それまでは機能していたのに突然のエラーで焦りました。

結論から言えば、原因は「ルータの電源が落としたせいでIPアドレスが変わった」ことでした。この記事では「なぜIPアドレスが変化したらエラーが出たのか」と、その修正方法について解説します。

ある日、エラーが出るようになった

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

それまで問題なく使えていたのに、突然このエラーが出たことで、「なぜ?!」と焦りました。

ネットで調べてみると、どうやらWAF(Web Application Firewall)が原因である可能性が高いことがわかりました

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

WAFが原因かどうかチェックするために、ConohaWINGの管理画面から「サイトセキュリティ」→「WAF」を確認したところ、多数のエラー(警告)が発生していることがわかりました。

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

とりあえず一時的な対処として、WAFをOFFにすることで投稿を完了させることができました

ただ、セキュリティ機能をOFFにし続けるのも心配だし、毎回保存するたびにWAFをOFFにするのも面倒です。

そこで、根本的な原因をさらに詳しく調べることにしました。

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

a blue question mark on a pink background

原因の調査

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

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

すると、

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

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

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

SQLインジェクションが発生するのは、プラグインに原因があるように思われますが、必要なプラグインしか入れていないので、プラグインを削除することはできません。ということで、他の方法での対策を見つける必要がありました。


さらに原因を調査する

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

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

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

こんな1文字の記事でもエラーが発生してしまいます。「これまでずっと、こんなエラーは発生していなかったのになぜ?」と思いました。

原因を特定するために色々試行錯誤しているときに、ConohaWINGのWAFページに「表示切り替え」メニューがあることに気づきました。

表示切替メニュー

これを「ログ」から「除外中」に切り替えて見ると、その他という設定を見つけました。

その他の画面

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

これをみて、一年くらい前に自宅のIPアドレスをWAFのセキュリティから除外していたことを思い出しました。

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

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

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

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

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

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

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

プロバイダから提供されるIPアドレス

固定IPのサービスに契約していない場合、プロバイダから提供されるIPアドレスは、接続毎に変化します。最近は常時接続していることが多く、半年以上電源を切らない(=IPアドレスが変化しない)ことも普通です。なので、IPアドレスが変化することを忘れがちですが、固定IPでない場合はIPアドレスは変化することを忘れないようにしましょう。

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

原因が特定できたので現在のIPアドレスをWAFから除外します。ここでは、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が良いんですけどね。

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

ABOUT ME
ある/Aru
ある/Aru
IT&機械学習エンジニア/ファイナンシャルプランナー(CFP®)
専門分野は並列処理・画像処理・機械学習・ディープラーニング。プログラミング言語はC, C++, Go, Pythonを中心として色々利用。現在は、Kaggle, 競プロなどをしながら悠々自適に活動中
記事URLをコピーしました