私は 404 エラー ドキュメントに取り組んでおり、サイトマップを提供するだけでなく、サーバー上に実際に存在するものに基づいて、ユーザーが探していた可能性のある Web サイトをユーザーに提案できると考えていました。
例: ユーザーが"www.example.com/foldr/site.html"と入力した場合、404 ページは次のように出力されます。
「www.example.com/folder/site.html」のことですか?
このために、私は非常にうまく機能する次のコードを書きました。私の質問は次のとおりです。これを使用しても「安全」ですか?基本的に、誰かがあらゆる種類の組み合わせを試すことで、サーバー上のすべてのファイルを検出できます。または、ハッカーがスクリプトを使用して、すべての種類の有効な URL をループして一覧表示する可能性さえあります。
このスクリプトが検出して提案できるディレクトリを制限する必要がありますか? 「OK」ロケーションの配列を使用するか、ファイルの種類ごとに使用しますか?
他の誰かがすでにこのようなアイデアを持っていましたか?
PHP:
// get incorrect URL that was entered
$script = explode("/",$_SERVER['SCRIPT_NAME']);
$query = $_SERVER['QUERY_STRING'];
// create vars
$match = array();
$matched = "../";
// loop through the given URL folder by folder to find the suggested location
foreach ($script as $dir) {
if (!$dir) {
continue;
}
if ($handle = opendir($matched)) {
while (false !== ($entry = readdir($handle))) {
if ($entry != "." && $entry != "..") {
similar_text($dir, $entry, $perc);
if ($perc > 80) {
$match[$entry] = $perc;
}
}
}
closedir($handle);
if ($match) {
arsort($match);
reset($match);
$matched .= key($match)."/";
} else {
$matched = false;
break;
}
$match = array();
}
}
// trim and echo the result that had the highest match
$matched = trim(ltrim(rtrim($matched,"/"),"."));
echo "proposed URL: ".$_SERVER["SERVER_NAME"].$matched;