今さら聞けないWordPressへphpinfoを安全に設置する手順

今さら聞けないWordPressへphpinfoを安全に設置する手順
今さら聞けないWordPressへphpinfoを安全に設置する手順

 

 
読了目安:313

Are you want to translate this page to English? Please click this link to translate via ‘©Google Translate'!

ganohr.net favicon

みなさんこんにちは、ガノー(Twitter:Ganohr)です。

phpinfo’は、PHPの情報をHTML(またはCLI環境ではプレーンテキスト)で出力するデバッグ用の関数です。

 

WordPressのプラグインやテーマが不具合を起こしている場合に、またはサイトが停止してしまっている場合に、phpinfoを用いた調査を必要とする場合があります。

しかし、ここで得られる情報はサイトを攻撃しようと企んでいるクラッカー連中からすれば、垂涎の情報です。

実際ある程度のアクセス数があるサイトなら、1~2時間あれば数回程度、大手に慣れば数秒単位で不正アクセス施行が試みられます。

 

そこでこの記事では「phpinfoを本当に必要な人間に限定して安全に提供する方法」を解説します。

安易にphpinfoを設置する方法を解説している存在意義皆無どころか有害な記事の餌食になる前に、以下に示すログのスクリーンショット画像を見た上で、本記事を正しく実践してください。

WordPressへの不正アクセス施行が記録されたアクセスログのスクリーンショット画像例
1時間30分程の短期間ながら3IPからの不正アクセス施行が記録されている。WordPressは世界一利用されているCMSであり、言い換えれば最もハッキング対象にされているCMSである。
サムネイルPHP: phpinfo - Manual ... 外部サイトへアクセスwww.php.net
更新履歴
2022/12/20 クラッキングされているWordPressに対する注意喚起を記載
2022/12/14 phpinfo(INFO_ALL);に関する情報を記載
2022/12/12 公開

WordPress 5.2以降を利用している場合、多くの場合でphpinfoは不要です

スーツ姿の女性(要点を伝えようと、人差し指を上に出している)
phpinfoの設置は最近のWordPressでは大抵の場合不要です

WordPressは5.2より、サイトヘルス機能を搭載しました。

このサイトヘルスでは「情報」タブより、phpinfoで得られるような、今WordPressが動作している環境の詳細情報が得られます。

 

したがってphpinfoはより詳細な情報を得たい場合や、WordPressが動作していない場合など、限定的な用途においてのみ利用する意味があります。

通常多くの方に、phpinfoを必要とする場面は無いでしょう。

phpinfoを設置する前にWordPressがクラッキングされていないか確認してください

女性がホワイトボードの前に立っている写真
phpinfoを設置するときはサイトがクラッキングされていないことを予め確認した上で作業してください

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のindex.phpの例
クラッキングされているWordPressのindex.phpの例

WordPressのサイトがハッキングされているときはどうする?

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

サムネイル【WordPress】不具合対応/カスタマイズ/AMP/キャッシュ他迄対応しますランサーズで見積もり・カスタマイズの相談を承ります ... 外部サイトへアクセスwww.lancers.jp

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

外で人差し指を上に出して要点を伝えようとしている女性
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アドレスです。

 

 
メモ
なお、広告ブロッカーを利用している場合、「192.168.0.1」になってしまいますが、広告ブロッカーを利用していなければあなたのIPアドレスが自動的に設定されます。

これにより、せっかくセキュアにphpinfoを設置しても、そもそもあなた自身がアクセスできなくなることがありません。これはとても便利だと思います。

この機会に当サイト(ganohr.net)を「お使いの広告ブロッカーのホワイトリストへ登録」してください。

サムネイル【サイト情報】広告ブロッカー利用中の方々へ当サイト『ぺるせぽ.』はみだりに広告ブロッカーを利用している方々へ警告を表示することとしました.この警告を無視して閲覧したい場合は「☓」ボタンを押すか警告文の領域外をクリックすることで非表示に出来ます.当サイトは個人が有料のレンタルサーバーを用いて高品質な情報を高速・軽量・高レスポンスにて提供するものでありサービス提供のクオリティを維持するためにも広告収入は必要不可欠です.より詳しい情報が知りたい方は以下のリンクからご確認下さい.また広告ブロッカーやトラッキング防止機能の調整 ... 続きを読むganohr.net2022-11-21

作成したフォルダに、phpinfoの結果を出力する、ランダムで比較的長いファイル名のphpファイルを格納する

先ほど作成したフォルダに、以下の内容をコピーし、ランダムで比較的長いファイル名のphpファイルとして保存します。

<?php
$ip = $_SERVER["REMOTE_ADDR"];
if (md5(md5(md5($ip))) !== "f83c9c7e5bd2f2834893da8a5f03b58b") {
    header('HTTP/1.1 403 Forbidden');
    die();
}
phpinfo(INFO_ALL);
 
注意
3行目のmd5で検証している値は、広告ブロッカーを利用している場合は127.0.0.1を指定した値です。広告ブロッカーを利用していない場合はあなたが今接続に使用しているIPアドレスが自動的に指定されるため、あなたのIPアドレス以外には403 Forbiddenを返すことができます。

 


※ この文字列はあなたのブラウザでJavaScriptを利用して生成したランダムな文字列です。安全に使用できますのでご活用ください。

phpinfoの出力結果を確認する

あとは、ブラウザを起動し、あなたのドメイン名に続けて、以下のURLをペーストしてアクセスしてください。


※ この文字列はあなたのブラウザでJavaScriptを利用して生成したランダムな文字列です。安全に使用できますのでご活用ください。

phpinfoを無効化する

設置したフォルダ自体を削除してください

 

このサイトを利用していれば、phpinfoを再度設置するのは簡単です。

ですので今後のために設置したままにしておく必要はありません。

WordPressの不具合対応/カスタマイズ¥15,000~

PC歴25年超、SE歴10年超、WordPress運営歴7年超、WordPressエンジニア歴5年超のスキルとノウハウを提供します

当サイト管理人の「ガノー」(Ganohr)は、日本最大手且つ東証一部上場企業が運営するクラウドソーシングサイト『Lancers』にて、認定ランサーとして活動しています。


※ 認定ランサーとはLancersにより様々な能力 ( 高い仕事遂行率・高い顧客満足度・多くの実績、など ) を評価したプロフェッショナルを認定する制度です。

 

PHPカテゴリの最新記事