これがURLであり、ブラウザに出力されるという理由だけで、セキュリティが影響を受けるとは思いません...最悪の場合、ファイルへの完全なディレクトリパスが公開され、壊れたリンクが作成される可能性があります.
ちょっとした補足として、これが HTML ドキュメントに印刷されている場合、htmlentities のようなものを介して出力を渡していると思います... 入力 $path に [script] タグ (XSS) のようなものが含まれている場合に備えて。
ただし、これをもう少し信頼できるものにするために、「DOCUMENT_ROOT」でのマッチングはお勧めしません。設定されていないか、一致しない場合があるためです (たとえば、Apache の書き換えルールが邪魔をし始めた場合)。
書き直すとしたら、「HTTP_HOST」が常に出力されるようにするだけです...
function make_url($path, $secure = false){
return (!$secure ? 'http://' : 'https://').$_SERVER['HTTP_HOST'].str_replace($_SERVER['DOCUMENT_ROOT'], '', $path);
}
...そして可能であれば、パスを渡すだけになるように呼び出しコードを更新してください. .
function make_url($path, $secure = false){
return (!$secure ? 'http://' : 'https://').$_SERVER['HTTP_HOST'].$path;
}
疑問が残るのはどれですか...なぜこの機能があるのですか?
私の Web サイトでは、スクリプト実行の開始時に変数を定義して、次のように設定します。
$GLOBALS['webDomain'] = 'http://' . (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '');
$GLOBALS['webDomainSSL'] = $GLOBALS['webDomain'];
GLOBALS を使用しているので、どこからでもアクセスできます (関数内など)...ただし、この値が変更されないことがわかっている場合は、定数を作成 (定義) することを検討することもできます (後でこれらの値を後で変更することがあります)。サイト全体の構成ファイル (たとえば、Web サイト用の HTTPS/SSL 証明書がある場合)。