
みなさんこんにちは、ガノー(Twitter:Ganohr)です。
‘phpinfo
’は、PHPの情報をHTML(またはCLI環境ではプレーンテキスト)で出力するデバッグ用の関数です。
WordPressのプラグインやテーマが不具合を起こしている場合に、またはサイトが停止してしまっている場合に、phpinfo
を用いた調査を必要とする場合があります。
しかし、ここで得られる情報はサイトを攻撃しようと企んでいるクラッカー連中からすれば、垂涎の情報です。
実際ある程度のアクセス数があるサイトなら、1~2時間あれば数回程度、大手に慣れば数秒単位で不正アクセス施行が試みられます。
そこでこの記事では「phpinfo
を本当に必要な人間に限定して安全に提供する方法」を解説します。
安易にphpinfo
を設置する方法を解説している存在意義皆無どころか有害な記事の餌食になる前に、以下に示すログのスクリーンショット画像を見た上で、本記事を正しく実践してください。

更新履歴
2022/12/14
phpinfo(INFO_ALL);
に関する情報を記載2022/12/12 公開
目次
- 1.WordPress 5.2以降を利用している場合、多くの場合でphpinfoは不要です
- 2.phpinfoを設置する前にWordPressがクラッキングされていないか確認してください
- 2.1.WordPressのサイトがハッキングされているときはどうする?
- 3.古いWordPressを利用している場合やサイトヘルスよりも詳しい情報が必要な場合で、且つ、WordPressが動作している場合のphpinfoの設置方法
- 4.WordPressが動作していない環境でのphpinfoの設置方法
- 4.1.WordPressをインストールしているフォルダに、ランダムで比較的長い名前のフォルダを作成する
- 4.2.作成したフォルダに、.htaccessを設置する
- 4.3.作成したフォルダに、phpinfoの結果を出力する、ランダムで比較的長いファイル名のphpファイルを格納する
- 4.4.phpinfoの出力結果を確認する
- 4.5.phpinfoを無効化する
WordPress 5.2以降を利用している場合、多くの場合でphpinfoは不要です

WordPressは5.2より、サイトヘルス機能を搭載しました。
このサイトヘルスでは「情報」タブより、phpinfoで得られるような、今WordPressが動作している環境の詳細情報が得られます。
したがってphpinfo
はより詳細な情報を得たい場合や、WordPressが動作していない場合など、限定的な用途においてのみ利用する意味があります。
通常多くの方に、phpinfo
を必要とする場面は無いでしょう。
phpinfoを設置する前にWordPressがクラッキングされていないか確認してください

WordPressがクラッキングされている場合、WordPressのindex.php
へ既にマルウェアやウィルス等が感染している可能性があります。
その場合、php
ファイルをアップロードし、そのファイルへアクセスするとWordPressを経由してそのファイルが起動してしまうため、クラッカーにそのファイルが設置されて呼び出されたことが伝わる恐れがあります。
最低限phpinfo
を設置する前に、index.php
と.htaccess
が以下の通りであることは確認しておいてください。
【正しいindex.php
例】
<?php
/**
* Front to the WordPress application. This file doesn't do anything, but loads
* wp-blog-header.php which does and tells WordPress to load the theme.
*
* @package WordPress
*/
/**
* Tells WordPress to load the WordPress theme and output it.
*
* @var bool
*/
define( 'WP_USE_THEMES', true );
/** Loads the WordPress Environment and Template */
require __DIR__ . '/wp-blog-header.php';
【正しい.htaccess
例】
# BEGIN WordPress
# "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\x.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
逆に以下のようなファイルになっていたらウィルス・マルウェアに感染している可能性があります。
【クラッキングされている.htaccess
例】
<FilesMatch ".(py|exe|php)$">
Order allow,deny
Deny from all
</FilesMatch>
<FilesMatch "^(about.php|radio.php|index.php|content.php|lock360.php|admin.php|wp-login.php|wp-l0gin.php|wp-theme.php|wp-scripts.php|wp-editor.php)$">
Order allow,deny
Allow from all
</FilesMatch>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
【クラッキングされているindex.php
例】

WordPressのサイトがハッキングされているときはどうする?
クラッキングされているサイトの回復は以下のURLにて1サイトあたり5万5,000円にて請け負っています。

古いWordPressを利用している場合やサイトヘルスよりも詳しい情報が必要な場合で、且つ、WordPressが動作している場合のphpinfoの設置方法

WordPressが古くてサイトヘルスが利用できない場合や、サイトヘルスよりも詳しい情報が必要な場合は、phpinfo
を設置する必要があります。
その中でも、WordPressが動作している環境であればWordPressの認証方法を流用してphpinfo
を出力することで、安全に情報を得られます。
WordPressをインストールしているフォルダに以下のコードをganohrs-siteinfo.php
として保存してください。
その後「https?://ホスト名/ganohrs-siteinfo.php」へアクセスすることで、phpinfo
の実行結果を得られます。
このとき、WordPressでログインしている管理者権限を保有している利用者のみに限定できるため安全です。一応、必要な情報を得られた後は、このphpファイルは削除してください。
<?php
define( 'WP_USE_THEMES', false );
require __DIR__ . '/wp-blog-header.php';
if ( ! is_user_logged_in() ) {
wp_die( 'WordPressにログインして下さい' );
}
if ( ! current_user_can( 'manage_options' ) ) {
wp_die( 'アクセス権限がありません' );
}
phpinfo(INFO_ALL);
phpinfo();
ではなくphpinfo(INFO_ALL);
を使うのか?phpinfo
を引数なしで呼び出した場合、通常はphpinfo(INFO_ALL);
と同じ内容を出力します。
しかし、レンタルサーバーの仕様によっては、この仕様が変更されており、phpinfo();
だけの場合に概要的な情報のみしか出力できないようになっている場合があります。
そのため、基本的にはphpinfo(INFO_ALL);
と記載することをお勧めします。
WordPressが動作していない環境でのphpinfoの設置方法
この節は、慎重に作業してください
まずWordPressが動作していない環境では、phpinfo
はWordPress復旧の手がかりになることが多くあります。
この場合、上記のコードは利用できず、セキュリティ対策を自力で行いつつphpinfo
を設置する必要があります。
そのため、慎重に操作することを心がけてください。
また、このページ内の領域は全てJavascriptを用いて(要はあなたの端末で)生成しており、当サイトのサーバーには記録されませんので、安心してご利用ください。
WordPressをインストールしているフォルダに、ランダムで比較的長い名前のフォルダを作成する
まず、WordPressがインストールされているフォルダに比較的長く、第三者から推測されにくい名前のフォルダを作成します。
※ この文字列はあなたのブラウザでJavaScriptを利用して生成したランダムな文字列です。安全に使用できますのでご活用ください。
このフォルダにphpinfo
とアクセス制限用の.htaccess
を設置します。
作成したフォルダに、.htaccessを設置する
続けて、以下の内容をコピーし、.htaccess
という名前で先ほど作成したフォルダに保存してください。
order deny,allow
deny from all
allow from 128.0.0.1
allow from 192.168.0.1
ここで4行目に指定するIPアドレスは、基本的にはあなたのIPアドレスです。
これにより、せっかくセキュアにphpinfo
を設置しても、そもそもあなた自身がアクセスできなくなることがありません。これはとても便利だと思います。
この機会に当サイト(ganohr.net)を「お使いの広告ブロッカーのホワイトリストへ登録」してください。

作成したフォルダに、phpinfoの結果を出力する、ランダムで比較的長いファイル名のphpファイルを格納する
先ほど作成したフォルダに、以下の内容をコピーし、ランダムで比較的長いファイル名のphpファイルとして保存します。
<?php
$ip = $_SERVER["REMOTE_ADDR"];
if (md5(md5(md5($ip))) !== "f83c9c7e5bd2f2834893da8a5f03b58b") {
header('HTTP/1.1 403 Forbidden');
die();
}
phpinfo(INFO_ALL);
127.0.0.1
を指定した値です。広告ブロッカーを利用していない場合はあなたが今接続に使用しているIPアドレスが自動的に指定されるため、あなたのIPアドレス以外には403 Forbidden
を返すことができます。
※ この文字列はあなたのブラウザでJavaScriptを利用して生成したランダムな文字列です。安全に使用できますのでご活用ください。
phpinfoの出力結果を確認する
あとは、ブラウザを起動し、あなたのドメイン名に続けて、以下のURLをペーストしてアクセスしてください。
※ この文字列はあなたのブラウザでJavaScriptを利用して生成したランダムな文字列です。安全に使用できますのでご活用ください。
phpinfoを無効化する
設置したフォルダ自体を削除してください
このサイトを利用していれば、phpinfoを再度設置するのは簡単です。
ですので今後のために設置したままにしておく必要はありません。
コメントを書く