症状 — 自作プラグインに「更新可能」の通知が出る
自社サイト用に自作したプラグインの一覧に、ある日こんな表示が出ました。
my-blog-tools 更新可能 0.1.0 → 1.0.3
(スラッグは説明用に変えています)
バージョン1.0.3など作った覚えがありません。これは不具合ではなく、WordPress.orgの公式ディレクトリに、たまたま同じスラッグ(フォルダ名)のプラグインが存在するときに起きる現象です。当社で実際に遭遇したケースでは、自作プラグインのフォルダ名と同名のプラグインが公式ディレクトリに公開されていました。
何が危険か — 「更新」を押すと他人のコードで上書きされる
WordPressの更新チェックは、インストール済みプラグインのスラッグをWordPress.orgのAPIに問い合わせ、同じスラッグでより新しいバージョンがあれば「更新可能」と表示します。中身が別物かどうかは見ていません。
つまりこの状態で「更新」を実行すると、自作プラグインのフォルダが公式ディレクトリ側の——赤の他人が書いた——プラグインで丸ごと置き換えられます。自作の機能は消え、サイトの挙動も変わり、最悪の場合は自動更新を有効にしているだけで無人のまま入れ替わります。悪意ある人間が「よく使われそうな自作プラグイン名」で公式に登録すれば、コード注入の入り口にもなり得る構造です。
対処 — プラグインヘッダーに「Update URI: false」を1行足す
WordPress 5.8以降、プラグインヘッダーのUpdate URIフィールドが公式にサポートされています。ここにfalse(またはWordPress.org以外のURL)を書くと、そのプラグインはWordPress.orgの更新チェック対象から除外されます。
<?php
/**
* Plugin Name: My Custom Plugin
* Description: 自社サイト用の自作プラグイン
* Version: 0.1.0
* Update URI: false
*/
追加後、既に表示されている更新通知はキャッシュ(transient)に残っているので、消して確認します。
# 更新情報のキャッシュを削除して再チェック
wp transient delete update_plugins
wp eval "wp_update_plugins();"
wp plugin list --fields=name,update
# → update が none になっていればOK
自作プラグインを作ったら必ずセットで入れておく
この1行は「同名プラグインが現れてから」では遅い場合があります。自動更新をONにしていると、気づかないうちに入れ替わっている可能性があるからです。自作プラグインの雛形にUpdate URI: falseを最初から含めておくことをすすめます。
なお、フォルダ名を「mysite-tools」のように自社固有のプレフィックス付きにしておくのも有効な予防策です。一般名詞の組み合わせ(blog-generator、custom-seo等)は、いつか誰かが公式ディレクトリで同じ名前を使う前提で考えたほうが安全です。
EC-CUBEゴールドパートナー
WordPress構築・保守