( تعداد نمایش : 1780 )

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 ها رو می تونید بگیرید.

دیدگاه خود را بیان کنید.

باید وارد سایت شده باشید برای دیدگاه دادن