WordPressブロックテーマのセキュリティについて見逃しがちな情報漏洩

WordPressのブロックテーマはテンプレートがhtmlのため、直接アクセスできる状態です。通常はコンテンツを記述するファイルではありませんが、運用方法によっては閲覧制限専用のテンプレートに機密情報を直書きすることもあります。用心のため、セキュリティ設定を追加します。

テンプレート直接アクセス禁止

ブロックテーマのテンプレートは/templates/配下と/parts/配下にあります。

  • /wp-content/themes/テーマ名/templates/fromt-page.html
  • /wp-content/themes/テーマ名/parts/header.html

また、テーマ設定ファイルであるtheme.jsonは以下にあります。

  • /wp-content/themes/テーマ名/theme.json

これらにブラウザから直接アクセスできないように、/wp-content/themes/テーマ名/に.htaccessをアップロードします。

.htaccessの内容は、htmlファイルとJSONファイルへの直接アクセス禁止です。

<FilesMatch "\.(html|json)$">
    Require all denied
</FilesMatch>

アップロード後、該当ファイルにアクセスしステータス403が表示されれば成功です。

phpファイルにif ( ! defined( ‘ABSPATH’ ) ) exit;を追記する

上記設定はphpファイルは含まれていません。WordPressでphpファイルの直接アクセスを禁止する方法は、各phpファイルの冒頭に下記を追記することです。

if ( ! defined( 'ABSPATH' ) ) exit;

この仕組みを説明します。WordPressの起動プロセスでは初期段階で必ずABSPATHという定数が定義されます。phpファイルのURLを直接開くと、ABSPATHが未定義のため、そこでプログラムが終了し、phpファイルのプログラムは実行されません。

仮に上記コードがない状態では、phpファイルにechoがあればブラウザにechoされてしまいます。これは不正に挿入された悪意のあるコードを実行可能な状態のため大変危険です。

WordPress 6.8.3に同梱されているTwenty Twenty Fiveテーマでは記述されていないのですが、設定が無駄になることはないため追記しました。