Webサイトのお助け隊

ファイル編集機能を無効化した際の代替となる安全なファイル編集方法

5 views
約14分

「WordPressの管理画面からテーマやプラグインのファイルを直接編集できる機能、便利だよな。でも、それ、本当に使い続けて大丈夫か?」

ある日、懇意にしているクライアントから血相を変えた電話がかかってきた。「サイトが真っ白で、管理画面にも入れない!」と。サーバーにSSHでログインして調べてみると、テーマのfunctions.phpの先頭に見慣れないコードがびっしりと書き加えられていた。典型的なマルウェアだ。侵入経路を追っていくと、どうやら管理画面のテーマエディターから改ざんされたらしいことが分かった。幸い、バックアップからすぐに復旧できたが、クライアントの信用を失いかけた、忘れられない失敗だ。

WordPressの管理画面にある「テーマファイルエディター」や「プラグインファイルエディター」。ちょっとした修正に便利だからと、ついつい使ってしまう気持ちはよく分かる。だが、その便利さの裏には、サイト全体を危険に晒す大きなリスクが潜んでいる。もし、管理者アカウントが乗っ取られたら? 攻撃者はこの機能を使って、いとも簡単にマルウェアを仕込み、君のサイトを乗っ取ることができる。笑えない話だ。

だから、僕はクライアントのサイトを構築する時、必ずこのファイル編集機能を無効化している。セキュリティの基本中の基本だ。「じゃあ、どうやってファイルを編集すればいいんだ?」当然の疑問だよな。大丈夫だ。プロの開発者が実践している、もっと安全で、もっと効率的な方法がいくつもある。今日は、その具体的な方法を君に伝えたい。

なぜ管理画面のファイル編集機能は危険なのか?

そもそも、なぜこの機能がこれほど危険視されているのか。理由は3つある。

1. 攻撃者の格好の標的になる

もし、何らかの方法で管理者アカウントのIDとパスワードが漏れてしまったら、どうなるだろうか。攻撃者は真っ先に管理画面にログインし、このファイル編集機能を探す。そして、テーマのfunctions.phpやプラグインのファイルに、バックドアやスパムサイトへのリダイレクトコードを埋め込む。一度これをやられてしまうと、サイトは完全に攻撃者の支配下に置かれる。個人情報を抜き取られたり、他のサイトへの攻撃の踏み台にされたり、やりたい放題だ。

2. たった1文字のミスでサイトが停止する

PHPのコードを編集していて、うっかりセミコロン;を1つ書き忘れただけで、サイトは「真っ白」になる。いわゆる「死の真っ白画面(White Screen of Death)」だ。管理画面のファイルエディターでこれをやってしまうと、管理画面自体にもアクセスできなくなり、修正することすら困難になる。FTPやSSHでサーバーに接続してファイルを修正する知識がなければ、完全に詰みだ。バックアップから復旧するしかなくなる。

3. バージョン管理ができない

管理画面のエディターで直接ファイルを編集すると、「いつ、誰が、何を、なぜ変更したのか」という履歴が一切残らない。チームで開発している場合はもちろん、個人で開発している場合でも、これは致命的だ。「あの修正はいつやったっけ?」「前の状態に戻したいけど、どうすれば…」なんてことになりかねない。Gitなどのバージョン管理システムを使っていれば、こんな問題は起こらない。

ファイル編集機能を無効化する方法

危険性が分かったところで、早速この機能を無効化しよう。方法は簡単だ。WordPressをインストールしたルートディレクトリにあるwp-config.phpというファイルに、たった1行のコードを追記するだけだ。

define("DISALLOW_FILE_EDIT", true);

この1行をwp-config.phpのどこか(/* That's all, stop editing! Happy publishing. */というコメントの前あたりが分かりやすい)に追記すれば、管理画面から「テーマファイルエディター」と「プラグインファイルエディター」のメニューが消える。

「え、でもwp-config.phpをどうやって編集するんだ?」と思った君は鋭い。そう、ここからが本題だ。安全なファイル編集方法への第一歩を踏み出す時だ。

安全なファイル編集方法(代替案)

プロの開発者が実践している、安全で確実なファイル編集方法は、主に以下の4つだ。君のスキルレベルや環境に合わせて、最適なものを選んでほしい。

レベル1:SFTP/FTPSを使う

これは最も基本的で、多くの人が使っている方法だろう。FileZillaやCyberduckといったSFTP/FTPSクライアントソフトを使って、サーバーに接続し、ファイルを直接編集する方法だ。

メリット:

  • 操作が直感的で分かりやすい。
  • 多くのレンタルサーバーで利用できる。

デメリット:

  • 手動でのアップロード・ダウンロードが必要で、ミスが起こりやすい。
  • バージョン管理ができない。

手順:

  1. FileZillaなどのクライアントソフトをPCにインストールする。
  2. レンタルサーバーの契約情報から、SFTP/FTPSの接続情報(ホスト名、ユーザー名、パスワード、ポート番号)を確認する。
  3. クライアントソフトに接続情報を入力して、サーバーに接続する。
  4. 編集したいファイルをPCにダウンロードする。
  5. 普段使っているテキストエディタ(VSCodeなど)でファイルを編集する。
  6. 編集したファイルをサーバーの同じ場所にアップロードして上書きする。

まあ、一番手軽な方法ではあるが、プロを目指すなら、次のステップに進むことを強く推奨する。

レベル2:SSHとコマンドラインエディタを使う

SSH(Secure Shell)を使ってサーバーに直接ログインし、vimnanoといったコマンドラインエディタでファイルを編集する方法だ。黒い画面に抵抗がないなら、これが一番早い。

メリット:

  • ファイルのダウンロード・アップロードの手間がなく、高速に編集できる。
  • サーバー上で直接コマンドを実行できるため、応用範囲が広い。

デメリット:

  • コマンドラインの知識が必要。
  • vimなどのエディタは操作に慣れが必要。

手順:

  1. ターミナルソフト(macOSなら標準のターミナル、WindowsならTera TermやWindows Terminal)を開く。
  2. ssh ユーザー名@ホスト名 のようにコマンドを打って、サーバーに接続する。
  3. cdコマンドで編集したいファイルがあるディレクトリに移動する。
  4. vim functions.php のようにコマンドを打って、エディタでファイルを開く。
  5. ファイルを編集する。
  6. 保存してエディタを終了する。

これができれば、もう初心者とは言わせない。サーバーを直接操作している感覚は、エンジニアとしてのスキルアップに繋がるはずだ。

レベル3:Gitでバージョン管理する

ここからが、現代的なWeb開発の領域だ。Gitを使って、ファイルの変更履歴をすべて記録し、安全にデプロイ(サーバーに反映)する方法だ。

メリット:

  • 変更履歴がすべて残るため、いつでも過去の状態に戻せる。
  • チームでの共同作業が容易になる。
  • デプロイを自動化できる。

デメリット:

  • Gitの学習コストがかかる。
  • サーバー側にもGit環境が必要な場合がある。

基本的な流れ:

  1. 自分のPCに開発環境(ローカル環境)を構築する。
  2. 開発したいテーマやプラグインのファイルをGitリポジトリで管理する。
  3. ローカル環境でファイルの編集・動作確認を行う。
  4. 変更内容をgit commitで記録する。
  5. git pushでGitHubやBitbucketなどのリモートリポジトリに変更を反映する。
  6. サーバーにSSHで接続し、git pullでリモートリポジトリから変更を取得する。

最近では、リモートリポジトリにpushするだけで、自動的にサーバーにデプロイしてくれるサービス(Deployer、GitHub Actionsなど)もある。ここまでくれば、もう完全にプロのやり方だ。

レベル4:ローカル開発環境を構築する

最終形態はこれだ。自分のPCの中に、本番のサーバーとそっくりな環境(ローカル開発環境)を構築し、そこで開発・テストを行ってから、完成したものをサーバーにアップロードする方法だ。

メリット:

  • 本番環境に一切影響を与えずに、安全に開発・テストができる。
  • インターネット接続がない場所でも作業できる。
  • 様々なツールと連携して、開発を効率化できる。

デメリット:

  • 環境構築のハードルが高い。

代表的なツール:

  • Local: WordPress専用のローカル開発環境ツール。初心者でも簡単に使える。
  • Docker: コンテナ技術を使って、軽量で独立した開発環境を構築できる。現代の開発では主流。

Localあたりから始めてみるのがいいだろう。GUIでポチポチするだけで、あっという間にWordPressサイトが立ち上がる。データベースの中身を直接書き換えたり、PHPのバージョンを切り替えたり、本番環境では怖くてできないようなテストも、ローカル環境なら気兼ねなく試せる。この安心感は、一度味わうと手放せない。

各方法の比較表

どの方法を選ぶべきか迷っている君のために、それぞれの方法を比較した表を用意した。自分のスキルレベルや、開発スタイルに合わせて選んでほしい。

方法難易度安全性バージョン管理チーム開発おすすめ度
SFTP/FTPS★☆☆☆☆★★☆☆☆★★☆☆☆
SSH + コマンドライン★★★☆☆★★★☆☆★★★☆☆
Git + デプロイ★★★★☆★★★★★★★★★★
ローカル開発環境★★★☆☆★★★★★★★★★★

見ての通り、難易度は上がるが、安全性と機能性も格段に向上する。最初は大変かもしれないが、一度身につければ、一生使えるスキルだ。投資する価値は十分にある。

実際の開発フローの例

具体的に、僕が普段どうやってWordPressサイトを開発しているのか、実際のフローを紹介しよう。

ステップ1:ローカル環境でサイトを構築

まず、Localを使って、自分のPC上にWordPressサイトを立ち上げる。クライアントの要望に合わせて、テーマをカスタマイズしたり、プラグインを設定したりする。この段階では、何度失敗しても誰にも迷惑がかからない。思う存分、試行錯誤できる。

ステップ2:Gitでバージョン管理

開発したテーマやプラグインのファイルは、すべてGitで管理する。変更を加えるたびにgit commitで記録を残す。コミットメッセージには、「何を、なぜ変更したのか」を必ず書く。後から見返した時に、自分でも理解できるようにするためだ。

git add .
git commit -m "ヘッダーのロゴサイズを調整、レスポンシブ対応を改善"

ステップ3:GitHubにプッシュ

ローカルでの開発が一段落したら、GitHubのプライベートリポジトリにgit pushする。これで、PCが壊れてもデータは安全だし、別のPCからでも作業を続けられる。

git push origin main

ステップ4:ステージング環境でテスト

本番環境にいきなりデプロイするのは危険だ。だから、本番とそっくりな「ステージング環境」を用意して、そこで最終確認を行う。レンタルサーバーによっては、ステージング環境を簡単に作れる機能がついている。

ステップ5:本番環境にデプロイ

ステージング環境で問題がなければ、いよいよ本番環境にデプロイする。SSHでサーバーに接続し、git pullでリモートリポジトリから最新のコードを取得する。

ssh user@example.com
cd /var/www/html/wp-content/themes/my-theme
git pull origin main

これで、安全かつ確実に、本番環境を更新できる。万が一、問題が起きても、git revertで簡単に前の状態に戻せる。この安心感は、何物にも代えがたい。

セキュリティをさらに高めるための追加設定

ファイル編集機能を無効化するだけでも十分効果はあるが、さらにセキュリティを高めたいなら、以下の設定も併せて行うことをおすすめする。

1. プラグインとテーマのインストールも制限する

管理画面からのファイル編集だけでなく、プラグインやテーマの新規インストールも制限したい場合は、wp-config.phpに以下の行を追加する。

define("DISALLOW_FILE_MODS", true);

これを設定すると、管理画面からプラグインやテーマのインストール、更新、削除がすべてできなくなる。更新作業はすべてSSHやSFTPで行う必要があるため、運用の手間は増えるが、セキュリティは格段に向上する。

2. ファイルのパーミッションを適切に設定する

サーバー上のファイルやディレクトリのパーミッション(アクセス権限)を適切に設定することも重要だ。一般的には、以下のように設定する。

  • ディレクトリ:755
  • ファイル:644
  • wp-config.php:600または400

SSHでサーバーに接続し、以下のコマンドで一括設定できる。

find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;
chmod 600 /var/www/html/wp-config.php

これで、不正なアクセスや改ざんのリスクを大幅に減らせる。

3. 定期的なバックアップ

どんなに対策を講じても、100%安全ということはない。だからこそ、定期的なバックアップが不可欠だ。僕は、UpdraftPlusというプラグインを使って、毎日自動でバックアップを取り、Google Driveに保存している。万が一の時でも、すぐに復旧できる体制を整えておくことが、プロとしての責任だ。

やらかした失敗談:SFTPでの上書きミス

僕も昔、SFTPでやらかしたことがある。クライアントのサイトで、CSSをちょっと修正しようと思って、style.cssをダウンロードして編集し、サーバーにアップロードした。その時、うっかり別のクライアントのstyle.cssを上書きしてしまったんだ。サイトのデザインが全く別のものに変わってしまい、クライアントから大目玉を食らった。幸い、手元にバックアップがあったから事なきを得たが、あの時の冷や汗は忘れられない。

手動での作業は、どうしてもヒューマンエラーがつきまとう。だからこそ、Gitを使ったバージョン管理や、ローカル開発環境での作業が重要になるんだ。「自分は大丈夫」なんて思わないことだ。約束だぞ。

FAQ

Q1. どうしても緊急で、外出先からファイルを修正したい場合はどうすればいい?

A. そんな時のために、僕はスマホにSSHクライアントアプリを入れている。まあ、スマホの小さい画面でvimを操作するのは至難の業だが、本当に緊急の時には役立つ。ただ、基本的にはPCの前で落ち着いて作業すべきだ。緊急事態を生まないための仕組み作りが、そもそも重要だ。

Q2. ローカル開発環境と本番環境で、データベースの同期はどうするの?

A. いい質問だ。WP-CLIのwp db exportwp db importを使ったり、WP-Migrate-DBのようなプラグインを使ったりする方法がある。データベースの同期は少し複雑なので、また別の機会に詳しく解説したい。

Q3. DISALLOW_FILE_EDITtrueにすると、プラグインの更新に影響はありますか?

A. いや、全く影響ない。これはあくまで管理画面からの「ファイル編集」を禁止するだけで、プラグインやテーマの「更新」や「インストール」は通常通り行える。安心して設定してくれ。

Q4. Gitを使うのが難しそうなんですが、もっと簡単な方法はありませんか?

A. 最初は誰でも難しく感じるものだ。だが、Gitは一度覚えてしまえば、開発の効率が何倍にも上がる。まずはGitHubの公式チュートリアルや、日本語の解説サイトで基本を学んでみるといい。分からないことがあれば、エンジニアのコミュニティで質問すれば、親切に教えてくれる人がたくさんいる。

まとめ:安全な開発フローこそが、君をプロにする

WordPressの管理画面からファイル編集機能を無効化することは、単にセキュリティを高めるだけでなく、君を「WordPressを使える人」から「WordPressで開発できるプロ」へと成長させるための、重要な第一歩だ。

SFTPから始め、SSHに慣れ、最終的にはGitとローカル開発環境を使いこなす。このステップを一つずつ登っていくことで、君のスキルは格段に向上し、もっと複雑で、もっと面白い開発ができるようになるだろう。便利な機能に甘えず、常に安全で、常にプロフェッショナルな方法を選択する。その姿勢こそが、信頼されるエンジニアになるための鍵なんだ。

WordPressのセキュリティ、不安に思っていませんか?

「自分のサイトは大丈夫だろうか…」
「何から手をつければいいか分からない…」

もしあなたが少しでもそう感じているなら、専門家によるセキュリティ診断を受けてみることを強くお勧めします。

>> WordPressセキュリティ無料診断はこちら

上記のサイトでは、WordPressのプロがあなたのサイトの脆弱性を無料で診断してくれます。問題が見つかれば、具体的な対策方法についてもアドバイスをもらえます。手遅れになる前に、一度プロの目でチェックしてもらい、安心を手に入れましょう。

FacebookでシェアTwitterでシェアPinterestでシェア