メインのindex.phpファイルをスケッチしました。これは、すべてのサイト要求のゲートウェイである必要があります。私がそれを望む理由は、クリーンなURLを持つためです。
ウェブサイトをモジュールに分割しました。(例:登録、記事など)
次に、.htaccessにいくつかの行を含めました。1つは次のとおりです。
RewriteRule ^([a-zA-Z0-9-]*)[/]?([a-zA-Z0-9-]*)[/]?([a-zA-Z0-9-]*)[/]?([a-zA-Z0-9-]*)[/]?([a-zA-Z0-9-]*)[/]?([a-zA-Z0-9-]*)[/]?([a-zA-Z0-9-]*)[/]?([a-zA-Z0-9-]*)[/]?([a-zA-Z0-9-]*)[/]?$ index.php?1=$1&2=$2&3=$3&4=$4&5=$5&6=$6&7=$7&8=$8&9=$9 [L,NC]
これは、各「フォルダ」を正しい$_GET要素にマップするだけです...domain / 1 / hi / 3
$_GET['2'] == 'hi'; // TRUE
したがって、最初の$_GET要素に基づいてモジュールを実行したいと思います。このようにして、プロジェクトを整理しておくことができます。また、モジュールに関連付けられているすべてのファイルはそのフォルダー内にあります。
これが私のフォルダ構造です:
/
modules/
register/
ajax/
process.php
register.php
articles/
articles.php
index.php
そして、ここにすべてをマップするためのPHPコード(index.php)があります:
<?php
$basePath = 'modules';
for ($x = 1; $x <= 9; $x++) {
if (preg_match('/[^a-zA-Z0-9-]/', $_GET[$x])) {
require_once(__DIR__ . "/$basePath/404/404.php");
die();
}
}
$baseModule = $_GET['1'];
if (file_exists(__DIR__ . "/$basePath/$baseModule/$baseModule.php")) {
require_once(__DIR__ . "/$basePath/$baseModule/$baseModule.php");
} else {
require_once(__DIR__ . "/$basePath/404/404.php");
}
これは危険なコードですか?正規表現を実行する理由は、GETにが含まれていないことを確認するためです。または/../を実行するために使用できるため、サーバー上の実質的にすべてのファイルを実行できます。
これはまだセキュリティホール、潜在的なセキュリティホールを引き起こしますか、それとも実際には悪い習慣ですか?
この問題への最善のアプローチは何ですか?