コンテンツにスキップ

WordPress 本体やプラグインが書き換えられていないかをチェックする方法

メインイメージ

WordPress の本体やプラグインのファイルが書き換えられていないかをチェックする方法を紹介します。

ファイルの書き換えチェックはどんなときに有用?

ファイルの書き換えチェックは次のような用途で使えます。

セキュリティ被害のチェック

WordPress サイトがハッキングされたりマルウェアに感染したりすると WordPress 本体やプラグインに含まれるファイルが改変されることがあります。 ファイルの書き換えをチェックすることでセキュリティ被害を発見できることがあります。

問題発生時のトラブルシューティング

WordPress サイトを運用していると「機能が正常に動作しない」「ページのレイアウトが崩れる」といった問題が発生することがありますが、その原因が WordPress 本体やプラグインのファイルの意図しない変更にあることがあります。 書き換えをチェックすることで問題の原因の絞り込みができます。

アップデート後のチェック

WordPress 本体やプラグインのアップデート後にファイルの書き換えチェックを行うことで、アップデートが適切に行われてすべてのファイルが正しく更新されたかを確認できます。

パッチ適用が正しく行われたかのチェック

WordPress 本体やコミュニティプラグインの書き換えは原則行うべきではありませんが、ときにはバグの修正などでパッチ適用が必要になることもあります。 パッチ適用後にファイルの書き換えチェックを行うことで、パッチが適切にあたったかどうかを確認できます。

WordPress でファイルの書き換えをチェックする方法

WordPress のコマンドラインツールである WP-CLI を使用します。

確認時のバージョン

wp cli version
WP-CLI 2.10.0

前提条件

  • WordPress サイトに SSH でアクセスできる
  • WP-CLI がインストールされている

WordPress 本体をチェックする

wp core verify-checksums コマンドを使います。

wp core verify-checksums

このコマンドは WordPress の公式リポジトリから WordPress をダウンロードして現在サイト上にある WordPress のファイル一式と比較してくれます。

出力サンプル

問題が無い場合は次のように出力されます。

Success: WordPress installation verifies against checksums.

例えばインストールディレクトリ直下の readme.html ファイルが書き換えられていると次のように出力されます。

Warning: File doesn't verify against checksum: readme.html
Error: WordPress installation doesn't verify against checksums.

readme.html ファイルが削除されてしまっている場合は次のように出力されます。

Warning: File doesn't exist: readme.html
Error: WordPress installation doesn't verify against checksums.

オプション

デフォルトでは WordPress がインストールされているルートディレクトリに WordPress 本体に含まれていないファイルが追加されていてもエラーにはなりません。 ルートディレクトリに追加されたファイルも検出したい場合は --include-root オプションをつけます。

wp core verify-checksums --include-root

wp core verify-checksums コマンドには次のオプションが用意されています。

OPTIONS

  [--include-root]
    Verify all files and folders in the root directory, and warn if any non-WordPress
    items are found.

  [--version=<version>]
    Verify checksums against a specific version of WordPress.

  [--locale=<locale>]
    Verify checksums against a specific locale of WordPress.

  [--insecure]
    Retry downloads without certificate validation if TLS handshake fails. Note: This
    makes the request vulnerable to a MITM attack.

プラグインをチェックする

wp plugin verify-checksums コマンドを使います。

wp plugin verify-checksums

このコマンドも wp core verify-checksums と同様に公式リポジトリからプラグインのファイルをダウンロードして現行のファイル一式と比較してくれます。

対象プラグインの指定方法

引数を指定しないとエラーになります:

wp plugin verify-checksums
Error: You need to specify either one or more plugin slugs to check or use the --all flag to check all plugins.

プラグインを指定する:

wp plugin verify-checksums akismet hello

すべてのプラグインを対象にする:

wp plugin verify-checksums --all

一部のプラグインを除外してその他すべてのプラグインを対象にする:

wp plugin verify-checksums --all --exclude=akismet

出力サンプル

Success: Verified 2 of 2 plugins.

ただし、プラグインのチェックはプラグインが正しく認識される状況でのみ動作します。 例えばプラグインのメインファイルが大幅に書き換えられて Plugin Name の行が削除されてしまっているようなケースではそのプラグインは正しくチェックされません。

オプション

wp plugin verify-checksums コマンドには次のオプションが用意されています。

OPTIONS

  [<plugin>...]
    One or more plugins to verify.

  [--all]

  [<plugin>...]
    One or  [<plugin>...]
    One or more plugins to verify.

  [--all]
    If set, all plugins will be verified.

  [--strict]
    If set, even "soft changes" like readme.txt changes will trigger
    checksum errors.

  [--version=<version>]
    Verify checksums against a specific plugin version.

  [--format=<format>]
    Render output in a specific format.
    ---
    default: table
    options:
      - table
      - json
      - csv
      - yaml
      - count
    ---

  [--insecure]
    Retry downloads without certificate validation if TLS handshake fails. Note: This
    makes the request vulnerable to a MITM attack.

  [--exclude=<name>]
    Comma separated list of plugin names that should be excluded from verifying. more plugins to verify.

  [--all]
    If set, all plugins will be verified.

  [--strict]
    If set, even "soft changes" like readme.txt changes will trigger
    checksum errors.

  [--version=<version>]
    Verify checksums against a specific plugin version.

  [--format=<format>]
    Render output in a specific format.
    ---
    default: table
    options:
      - table
      - json
      - csv
      - yaml
      - count
    ---

  [--insecure]
    Retry downloads without certificate validation if TLS handshake fails. Note: This
    makes the request vulnerable to a MITM attack.

  [--exclude=<name>]
    Comma separated list of plugin names that should be excluded from verifying.

以上です。

他の方法としては、例えば WordPress の環境を Git で管理していれば git diff コマンドなどでも書き換えのチェックが可能です。 他にもいくつか方法はありますがおそらく最もスタンダードな方法はこの WP-CLI を使った方法かと思います。

WP-CLI 公式リファレンス