• このエントリーをはてなブックマークに追加

インクルード用に使用するファイルに直接URLをたたいて、アクセス可能なケースがありますが、そういった場合は、PHPとして処理を行わないようにする方法があります。

<?php
/* パターン1 : メッセージを表示する */
// 直接アクセス禁止
if (array_shift(get_included_files()) === __FILE__) {
	die('エラー:正しいURLを指定してください。');
}

/* パターン2 : リダイレクトする */
// 直接アクセス禁止
if (array_shift(get_included_files()) === __FILE__) {
	header('Location: http://www.example.com/');
	exit;
}
?>

アクセスされないように工夫する

module,includeなどのフォルダ名などを使用せずに、違った名称を利用するようにする。または、アクセスできないフォルダに配置することで、外からは一切アクセスできなくするというアイデアもある。

どういうことかというと、通常はグローバルの表示用フォルダに配置するがそれよりも階層が上・隣の階層に配置して、そとからはアクセスできないが、PHPのプログラムからは読み込み・インクルードは可能といったシステム構築を行うということも可能。

例)

  • user_a1 – ユーザーフォルダ
    • public_html – 通常の公開ディレクトリ
      • index.php – index
      • include – インクルード用ディレクトリ
        • header.php – ヘッダーパーツ
    • secret – シークレット
      • このようなディレクトリが作成できればいいが、mailなどのフォルダに入れられるのか…といったところ

ただ、このアイデアは、上記通り、公開ディレクトリとは違ったところに配置するので、読み込みまたは配置が許可されていないと使えない。