画像のホットリンクについてどこかで読みました。画像のホットリンクを防止すると、サイトからの帯域幅の盗難を防止できます。 PHPファイルに対して機能しますか?
私の場合、PHPファイルを使用して画像からサムネイルを生成しています。他の人が自分のサイトからこのPHPファイルを参照することは望ましくありません。
プログラムによる1つの方法は、リファラーをチェックして、リクエストがサイトから送信されたことを確認することです。
<?php
$yoursite = "yoursite.com"; //Your site url without http://
$yoursite2 = "www.yoursite.com"; //Type your domain with www. this time
$referer = $_SERVER['HTTP_REFERER'];
//Check if browser sends referrer url or not
if ($referer == "") { //If not, set referrer as your domain
$domain = $yoursite;
} else {
$domain = parse_url($referer); //If yes, parse referrer
}
if($domain['Host'] == $yoursite || $domain['Host'] == $yoursite2) {
//Run your image generation code
} else {
//The referrer is not your site, we redirect to your home page
header("Location: http://yoursite.com");
exit(); //Stop running the script
}
?>
編集
この記事 は、PHPセッションを使用した代替方法を示しています。
この例はイメージ用です。どのファイルタイプでも同じことができます。Webからそのフォルダにアクセスできないようにすることができます(たとえば、htdocsの外にフォルダを配置するか、.htaccessルールを追加します)。
プライベートイメージへのすべてのリクエストを処理するPHPスクリプトを作成します。このスクリプトは次を実行する必要があります。
-ユーザーが認証されているかどうかを確認します
-要求された画像を表示する権限があるかどうかを確認し、画像を開いてブラウザに印刷します
(コンテンツが画像として扱われるように、正しいhttpヘッダーを設定する必要があります)
デモ
getimage.php
if (LoggedInUserCanAccessThisFile())//this is optional user define function as requirement if you want that only login user can see image then with the help of your session variables or cookies you can return this function true or false
{
$file = 'privatedir/image.jpg';
$type = 'image/jpeg';
header('Content-Type:'.$type);
header('Content-Length: ' . filesize($file));
readfile($file);
exit();
}
home.php/otherpage.php
<img src="getimage.php" />
(src = "getimage.php?userid = 123"を使用してgetimage.phpにアクセスし、このユーザーがログインしているかどうかを確認して画像を表示できます)
(また、ダイナミックイメージコードにsrc = "getimage.php?userid = 123&imgfilename = image3.jpg"を使用し、getimage.phpとして次のように取得できます。
$file = 'privatedir/'.$_GET["imgfilename"];
)