WordPressでfunctions.phpが保存できない原因はXserverのWAF

functions.phpが保存できない|Xserver WAF
  • URLをコピーしました!

WordPress functions.php 保存できない状態になると、テーマのカスタマイズ作業が止まります。
本記事は、Xserver上のWordPressで「テーマファイルエディター」から functions.php を保存しようとして失敗した、実体験の記録です。

パーミッションを777にしても改善せず、同一サーバー上の複数サイトでも同じ症状が出ました。
今回のケースでは原因はXserverのWAFでした。
WAFを無効化すれば保存できましたが、セキュリティ上その状態は維持せず、FTPやファイルマネージャで編集する方針に切り替えています。

ポイント

権限設定を疑う前に、Xserver WAFの誤検知も切り分け対象に入れてください。
WAFが原因でも、常時オフのまま運用せず、FTPやファイルマネージャで編集するのが安全です。

目次

発生したエラー(テーマファイルエディター)

WordPress管理画面の「外観」→「テーマファイルエディター」で functions.php を開き、内容を変更して保存しました。
すると、次のメッセージが表示され、保存に失敗しました。

変更を保存中にエラーが発生しました。もう一度お試しください。

いわゆるテーマファイルエディター エラーです。
構文エラーを指摘するダイアログではなく、保存処理そのものが通らない印象でした。
ブラウザを再読み込みしても、同じ操作で同じ文言が出続けました。

環境:Xserver上のWordPress

発生環境は次のとおりです。

項目内容
レンタルサーバーエックスサーバー(Xserver)
CMSWordPress
操作場所管理画面のテーマファイルエディター
編集対象functions.php

つまり「ローカル開発環境」ではなく、Xserver上の本番相当のWordPressで起きています。
後述のとおり、同じXserverアカウント配下の複数サイトでも同様でした。

パーミッション777でも直らなかった

functions.php が保存できないとき、まず疑われやすいのがファイルの書き込み権限です。
そこでパーミッションを777に変更して再保存を試しました。
しかし、エラーは解消しませんでした。

さらに、同じXserver上の複数サイトでも、テーマファイルエディターから functions.php を保存しようとすると同じ症状が出ました。
サイトごとのテーマ設定や個別プラグインだけが原因、という説明は付けにくくなります。
「特定ファイルの権限不足」より、サーバー側で管理画面の保存リクエストがブロックされている可能性が濃くなりました。

注意

パーミッション777は、誰でも書き込める状態に近づく危険な設定です。
切り分けのため一時的に試したとしても、確認後は適切な権限へ戻してください。

原因はXserverのWAFだった

切り分けの結果、今回のケースでは原因はXserverのWAF(Webアプリケーションファイアウォール)でした。
一般的にはプラグイン干渉やPHP構文エラーなども候補になりますが、本事例ではそれらではなくWAFでした。
Xserver公式マニュアルでは、WAFを次のように説明しています。

WAF(Webアプリケーションファイアウォール)は、Webアプリケーションの脆弱性を悪用した攻撃からWebサイトを保護することが可能です。
不正アクセスからサイトを保護し、WordPressなどのWebアプリケーションの安全性を簡単な設定で向上することができます。

引用:WAF設定 – エックスサーバー公式マニュアル

WAFは攻撃っぽいパターンを含むリクエストを遮断します。
テーマファイルエディターから送る functions.php の内容に、検知ルールに抵触する文字列が含まれると、正規の管理操作でも保存が弾かれることがあります。

検知時の動きについても、公式には「検知された場合には、アクセスが拒否されエラーページが表示されます」と案内されています。
実際の画面では汎用的な保存エラー文言だけが出ることもあり、WAFだと気づきにくい点に注意が必要です。

WAFを無効化すると保存できた(確認のみ)

サーバーパネルの「WAF設定」で対象ドメインのWAFを一時的に無効化したところ、テーマファイルエディターから functions.php を保存できました。
これにより、「権限不足」ではなくXserver WAFが保存リクエストを妨げていたことを確認できました。
公式マニュアルでは、WAF設定の追加・変更後、反映まで時間がかかることがあると記載されています。

新サーバーパネル向けの案内では最大30分程度、旧サーバーパネル向けの案内では最大1時間程度かかる場合がある、とされています。
切り分け時は、変更直後にすぐ結果を断定せず、反映待ちも見込んでください。
設定手順の詳細は、エックスサーバー公式のWAF設定マニュアルを参照してください。

WAFを無効化したままにしない理由

保存できることは確認できましたが、WAFを無効化したまま運用する方法は採用しませんでした。
理由は単純で、WAFはWordPressを含むWebアプリへの攻撃を緩和する防護層だからです。
管理画面の一部操作のためだけに常時オフにすると、サイト全体の防御が弱くなります。

公式も、WAFは万能ではなく最低限の予防策であること、アプリ自体の更新やセキュリティ対応が必要であることを明記しています。
だからこそ、「誤検知があるからオフ固定」ではなく、WAFは有効のまま、別経路でファイルを直す方がバランスが良いと判断しました。

代替手段:FTP・ファイルマネージャで編集する

functions.php の編集自体は、テーマファイルエディター以外でもできます。
今回採用したのは、XserverのファイルマネージャとFTPです。

Xserverのファイルマネージャ

エックスサーバーには、ブラウザ上でファイルを編集できるファイルマネージャ(WebFTP)があります。
公式マニュアルでは、「ブラウザを使用してファイルのアップロード・削除等を行うためのシステム」と説明されています。

FTPクライアントを入れなくても、functions.php を開いて直接編集できます。
ログイン方法や操作の詳細は、ファイルマネージャ利用方法(エックスサーバー公式)を確認してください。

  1. Xserverのファイルマネージャにログインする
  2. 対象サイトのテーマディレクトリへ移動する(例:wp-content/themes/使用中テーマ/)
  3. functions.php を選択して編集する
  4. 保存後、サイト表示と管理画面の動作を確認する

FTPクライアントで編集する

普段からFTPを使っている場合は、ローカルで編集して上書きアップロードする方法も確実です。
テーマファイルエディターを経由しないため、管理画面経由のPOSTがWAFに引っかかる経路を避けられます。

  • まず現行の functions.php をバックアップしてから編集する
  • PHPの構文ミスがあるとサイト全体が真っ白になるため、小さな変更単位で反映する
  • 可能なら子テーマ側を編集し、親テーマ直編集を避ける
補足

テーマファイルエディターは便利ですが、本番サイトでは誤編集のリスクが高い機能でもあります。
普段からFTPやファイルマネージャで編集する運用にしておくと、今回のような保存エラー時にも慌てにくくなります。

一般的にあり得る他の原因(今回とは別)

ここまでは今回の実測結果です。
一方で、functions.php が保存できない一般的な原因はWAFだけではありません。
混同しないよう、別枠で挙げます。

  • ファイル権限や所有者の問題(ただし本事例では777でも改善せず)
  • functions.php のPHP構文エラーにより保存ガードが働く場合
  • セキュリティ系プラグインによる管理画面操作の制限
  • ディスク容量不足や一時的なサーバー障害

切り分けの順番としては、「権限 → 構文 → プラグイン無効化テスト → WAFログ/一時無効化での確認」が分かりやすいです。
XserverではWAF設定画面からブロックログを確認できる場合もあるため、管理画面の保存失敗とログ時刻が一致するかを見ると判断が早まります。

WAFを一時オフにして保存したら、そのままオフで大丈夫?

いいえ。

原因確認のための一時無効化にとどめ、編集が終わったら有効に戻してください。
日常編集はFTPやファイルマネージャを使う方が安全です。

パーミッションを777にすれば解決しますか?

今回のケースでは解決しませんでした。
権限問題でないときは、777にしてもテーマファイルエディターの保存エラーは続きます。
しかも777はリスクが高いため、常用は避けてください。

同じXserverで複数サイトが失敗したら何を疑う?

個別サイトのテーマ設定より、サーバー共通の仕組み(WAFなど)を優先して確認してください。
本事例でも複数サイト同症状が、WAF切り分けのきっかけになりました。

まとめ

XserverのWordPressで、テーマファイルエディターから functions.php が保存できず、「変更を保存中にエラーが発生しました。もう一度お試しください。」と出る場合があります。

本事例ではパーミッション777でも直らず、同一サーバーの複数サイトで同症状でした。
原因はXserverのWAFであり、一時的に無効化すると保存できることも確認しました。

ただしセキュリティ上、WAFを無効化したまま運用する方法は採りませんでした。
WAFが原因の場合は、無理にWAFを無効化せず、FTPやXserverのファイルマネージャなど別の方法で編集するのが安全です。

公式の設定手順は、WAF設定とファイルマネージャ利用方法をあわせて確認してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次