Hot Linking(نقره داغ وب مسترها)
اگه
شما هم سايتی داريد که میزبان تصاوير و عکسهای منحصر به فردی
هست، يکی از مشکلاتی که با اون مواجه اید، Hot
Linking است.
يعنی سايتهای ديگه، با لينک دادن به تصاوير در صفحات خودشون، چنان
وانمود می کنند که اين عکسها، توسط اونها گرفته شده و متعلق به اونهاست و یا
میزبانی تصاویر رو بر عهده دارند. علاوه بر مسائل کپی
رايتی که پيش مياد، Hot Link شدن تصاوير، پهنای باند شما رو هم مصرف میکنه.
راه حلهای مختلفی برای حل این مشکل پیشنهاد میشه.
یک راه حل مستلزم استفاده از امکان mod_rewrite آپاچی هست که بر حسب
اطلاعات رجوع دهنده(referral) که مرورگر در اختیار میگذاره(که
نمیشه همیشه به اون اعتماد کرد) ببینیم که آیا رجوع
دهنده، آدرس وب خودمون هست یا نه. برای مثال:
SetEnvIfNoCase Referer "^http://www\.phpmystery\.com/" locally_linked=1
SetEnvIfNoCase Referer
"^http://phpmystery\.com/" locally_linked=1
SetEnvIfNoCase Referer
"^$" locally_linked=1
<FilesMatch "\.(gif|png|jpe?g)$">
Order Allow,Deny
Allow from env=locally_linked
</FilesMatch>
راهکار
ديگر استفاده از Session است تا معلوم کنيم، بازديد کننده ای که در
حال مشاهده تصوير است، از سايت ما می باشد. اينکار بدين طريق صورت ميگيرد که
ابتدا متغييری در Session رجيستر می کنيم که در صورت وجود اين
متغير، ويزيتور قادر به مشاهده تصاوير است. البته اسکريپت دومی هم وجود دارد
که تصاوير رو رندر ميکنه:
<?php
// Start a session
session_start();
// Register a variable in the session
$_SESSION['viewImages'] = TRUE;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title> Preventing Hotlinking </title>
<meta http-equiv="Content-Type"
content="text/html; charset=iso-8859-1"
/>
</head>
<body>
<p>Here is the image:</p>
<img src="11.php?img=php-big.png" />
</body>
</html>
همانطور که متوجه شديد، در اسکريپت بالا ابتدا يک Session رو آغاز می کنيم، در
ادامه متغير viewImages رو در Session رجيستر می کنيم. سپس
از تگ img به يک اسکرپيت PHP اشاره می شود که وظيفه
واکشی تصوير رو بر عهده داره.
کد اسکريپت دوم:
<?php
// Start a session
session_start();
// Check to see if $viewImages is
registered
if (isset($_SESSION['viewImages']) &&
$_SESSION['viewImages'] == TRUE) {
// An array of available images
$images = array(
'phpmystery_logo.jpg',
'php-big.png'
);
// If $_GET['img'] is set and
is available...
if (isset($_GET['img']) && in_array($_GET['img'], $images)) {
// Get the image information
$dims = getimagesize('sample_images/' . $_GET['img']);
// Send the correct HTTP headers
header('content-disposition:
inline; filename=' .
$_GET['img']);
header('content-type:
' . $dims['mime']); #
PHP 4.3+
header('content-length:
' .
filesize('sample_images/' . $_GET['img']));
// Display the image
readfile('sample_images/' . $_GET['img']);
} else {
die('Invalid or no image specified');
}
} else {
die('This image is protected from hotlinking');
}
?>
در اسکريپت بالا، ابتدا بررسی می شود که آيا متغير viewImage
در Session رجيستر شده و مقدار آن برابر True است. اگر چنین بود، سپس نام فايل تصويری
که در آرايه سراسری GET_$ رجيستر شده، بررسی می شود که در آرايه تصاوير موجود
باشد. بعد از اين مرحله، اسکريپت با استفاده از تابع getimagesize نوع فايل(MIME type) را تشخيص داده و هدرهای مناسب رو
فرستاده و نهایتا تصوير را نمايش ميدهد.
با اينکار جلوی تمام Hot Linker ها رو می تونيد بگيريد.
بازگشت به فهرست
بازگشت به صفحه نخست