11

したがって、私の質問は簡単です。リファラーのドメイン名を介してphpスクリプトへのアクセスを許可するために次の方法を使用しましたが、完全なURLに一致するリファラーのみにアクセスを許可したい.

<?php
if (isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] != 'domain.com')
{
echo "Eexcuting code here";
} else {
echo('Hot Linking Not Permitted');
// display some message / image / video
exit;
}
?>

したがって、リファラー URL がhttp://www.domain.com/page.htmlと一致する場合はアクセスを許可し、それ以外の場合はブロックします。

4

2 に答える 2

27

リファラー データは簡単に偽装できるため、安全ではありません。ただし、それでもニーズに合っている場合は$_SERVER['HTTP_REFERER']、ドメインだけでなく完全なリファラー URL が含まれているため、コードで問題ないはずです。実際、現在のコードはそのようには機能しないため、いくつかの調整が必要です。

<?php
// This is to check if the request is coming from a specific domain
$ref = $_SERVER['HTTP_REFERER'];
$refData = parse_url($ref);

if($refData['host'] !== 'domain.com') {
  // Output string and stop execution
  die("Hotlinking not permitted");
}

echo "Executing code here";
?>

必要なものかどうかを確認する前に HTTP_REFERER が設定されているかどうかを確認すると、リファラーがまったく設定されていないスクリプトにアクセスする可能性があるため、いずれにしても確認する必要があります。これで、特定の URL のチェックがはるかに簡単になりました。

<?php
// This is to check if the request is coming from a specific URL
$ref = $_SERVER['HTTP_REFERER'];

if($ref !== 'http://domain.com/page.html') {
  die("Hotlinking not permitted");
}

echo "Executing code here";
?>
于 2013-02-13T13:08:42.547 に答える
6

あなたが守ろうとしているのは何ですか?

HTTP_REFERERはスプーフィングされる可能性があるため、決して信頼しないでください(他の人が指摘しているように)。また、一部のファイアウォールとセキュリティソフトウェアはリファラーを書き換えたり削除したりしますが、すべてのブラウザーがそれを正しく報告するわけではありません。

機密データの場合は、個人的にページ間でハッシュを渡します。

于 2013-02-13T13:20:18.767 に答える