解決法:更新に失敗しました返答が正しいJSONレスポンスではありません。【WordPress/SiteGuard】

WordPress

WordPressで記事を更新しようとしたら「更新に失敗しました。返答が正しいJSONレスポンスではありません。」とエラーが出るようになりました。

更新しようとすると「更新に失敗しました。返答が正しいJSONレスポンスではありません。」とエラーが表示される

サーバー構築環境

サーバーの構築環境はこんなカンジです。

構築環境
  • サーバー:さくらVPS
  • OS:CentOS Linux release 7.9.2009 (Core)
  • Webサーバー:Apache/2.4.6 (CentOS)
  • PHP 7.2.30

解決のために試したこと

今まで問題なく更新できていたのに突然です。公開はもちろん下書きの状態でも反映されません。
検索すると同じような症状で困っている記事がたくさんありました。

色々な記事を参考にして、次のことを試しても改善せず。

  • パーマリンクの設定をリセット
  • .htaccessは「apache」が書き換え可能な権限にする
  • ネットを一度オフにして再度接続


今回、最大の特徴はJavaScriptのコードを記事に記載するとエラーが発生することでした。
またGutenberg(グーテンベルク)ではなく、旧エディタに戻しても更新可能です。
.htaccessが原因ではなさそうです。

原因はファイアーウォール(WAF)

結論からいうと原因はWAF(Web Application Firewall)でした。
サーバーに『SiteGuard Light』というソフトウェアをインストールしたんですが、こちらの検査に引っかかってました。

早速『SiteGuard Light』の管理画面でログを確認してみます。

案の定ブロックされてました(笑)IPアドレスは全て自分のアクセスでした。原因はこれで間違いないようです。

シグネチャを検査から除外する

検出名(シグネチャというらしいです)は全て「RULE_SIG」です。これを検査から除外すればOKな訳です。
.htaccessにシグネチャやアクセス元IPアドレスを記載して除外する方法もありますが、今回は『SiteGuard Light』の管理画面から設定します。

①モジュール設定→②カスタム・シグネチャ→③追加の順番でクリックします。

シグネチャ登録画面で「シグネチャ名」に先程のRULE_SIG、「動作」を安全に設定します。
一応コメント欄にもわかりやすい説明を設定します。

これでも問題ないと思いますが、全てのRULE_SIGを除外するのもセキュリティ的に問題がありそうなので、接続元IPアドレスを設定して制限します。

「条件追加」をクリックします。

検査対象を「接続元IPアドレス」、検査文字列の欄に現在自分が使用しているIPアドレスを入力します。正規表現なので「.」をエスケープするのを忘れずに。。

画像のIPアドレスはテスト用です

IPアドレスの調べ方

インターネットに接続しているIPアドレスは次のようなサイトで調べることができます。

アクセス情報【使用中のIPアドレス確認】
あなたのアクセスしているIPアドレス情報などをENVとJavaScriptで取得し表示します。あなたのIPアドレスからポート疎通・ping疎通・DNS索引・WHOIS情報も取得できます。

また、WordPressに『SiteGuard WP Plugin』プラグインを入れている場合、ログイン履歴から調べることもできます。

WordPress管理画面

話がそれますが、サーバーにインストールした『SiteGuard Lite』とWordPressに追加した『SiteGuard WP Plugin』は別物です。ちょっとややこしい。。

シグネチャを除外する設定を完了させる

最後に「適用」をクリックすればすぐに反映されると思います。

.htaccessで除外する場合

最後に、.htaccessで除外する方法もメモしておきます。
これらをファイルに追記してFTPアップすれば反映されるようです。

シグネチャ除外

<IfModule mod_siteguard.c>
 SiteGuard_User_ExcludeSig RULE_SIG
</IfModule>

IPアドレス除外

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

参考URL

【WordPress】【解決法】更新に失敗しました。返答が正しいJSONレスポンスではありません。
WordPressの環境に寄りますが、記事を更新しようとすると「更新に失敗しました。返答が正しいJSONレスポンスではありません。」とエラー表示がされて更新や公開や下書きができないときがあります。いままで管理しているBlogでは出たことがな
特定シグネチャの除外方法|マネージドプラン CHM-Z|操作マニュアル|CPIサポート
レンタルサーバーCPIのお客様サポートサイトです。お手続き・お支払い関連、各種設定方法、お問い合わせ、障害メンテナンス情報などについてご案内します。
【誤検知】WAFのSiteGuard Liteで閲覧をブロックされてしまった場合の除外設定の方法 | 名古屋のホームページ制作なら株式会社SPOT
最近、サーバーにWAF(ウェブアプリケーションファイアーウォール)が標準搭載されることが増えてきました。 SQLインジェクション等のハッキングとかの攻撃をブロックできるのは確かにすごく便利で安全です。 でも、困ってしまう …

まとめ

今回、接続元IPアドレスを指定して除外しました。
プロバイダによっては接続の度にIPアドレスが変更になる場合があります。家や会社だけでなく、外出先でアクセスした場合でも同様です。
その場合、都度IPアドレスを追加しなければいけない訳ですね。。

今回の場合、更新するユーザーが私だけなので問題ありませんが、複数人数で更新するサイトの場合、運営方法を考える必要があるかなー。と思いました。
こればっかりはセキュリティとの折り合いなので仕方ないでしょうか。。