نحوه استفاده از اسکریپت
1- آپلود تصاویر
تصاویر شما بایستی در پوشه ای قرار بگیرند که توسط دیگر کاربران قابل مشاهده نباشند. مسلما در صورتی که کاربری بتواند آدرس پوشه محتوی فایلها را پیدا کرده و به آنها دسترسی داشته باشد تمام آنچه که کرده ایم بی نتیجه خواهد بود. مناسب ترین مکان جایی است که توسط وب سرور قابل دسترسی نباشد اما اسکریپت شما قابلیت دسترسی به آن را داشته باشد.
در بسیاری از وب سرور ها میبایست صفحات وب در پوشه ای به نام "public_html" یا “www” قرار بگیرند تا بتوانند توسط مرورگرها مشاهده شوند. شما میتوانید تصاویرتان را در پوشه ای در کنار این پوشه ها و نه درون آنها ایجاد نمایید. در این صورت مرورگر ها قادر به مشاهده تصاویر نخواهند بود.
2- ویرایش کردن صفحات وب
در کلیه صفحات خود بایستی تگ های تمامی تصاویر به گونه ای قرار داده شوند که لینک مستقیمی به تصویر مورد نظر نداشته باشند. چرا که در این صورت با توجه به مکان تصاویر اصولا قابل مشاهده نخواهند بود. مثلا چنین تصویری :
<image src=" mymugshot.gif">
باید به این شکل تغییر کند:
<image src="chimage.php?image=award.jpg">
نکته مهم : اسکریپت مربوطه تنها میتواند فرمتهای Gif , JPG,PNG را پشتیبانی نماید.
در زمان سرقت تصاویر چه اتفاقی می افتد؟
چنانچه کاربری سعی کند لینک مستقیم به تصاویر سایت را در جای دیگری استفاده نماید، به جای مشاهده تصویر، مرورگر تصویر پیش فرضی را نشان خواهد داد که حاکی از نادرست بودن لینک تصویر است.
در صورتی که شما گزینه ایمیل را نیز فعال کرده باشید، ایمیلی نیز به شما ارسال خواهد شد که آدرس هاست مربوطه و دیگر اطلاعات به شما اعلام خواهد شد.
عملکرد این اسکریپت به چه شکل است؟
زمانی که فردی یک صفحه وب را مشاهده میکند، مرورگر تقاضای دریافت تصاویر مربوطه را نیز به وب سرور ارسال مینماید. این اسکریپ تقاضاهایی که به وب سرور میشود را تحلیل کرده و بررسی میکند که آیا تصویر مربوطه متعلق به هاستی است که شما به آن اجازه لینک مستقیم را داده اید یا خیر. اگر اینطور باشد تصویر را به هاست تقاضا دهنده میفرستد ولی در غیر این صورت وب سرور را آگاه میکند که تصویر مربوطه قابل دترسی نیست.
تغییر خروجی
برخی کاربران ترجیح میدهند زمانی که هاست غیر مجازی اقدام به مشاهده تصویر به صورت لینک مستقیم مینماید به جای فرستادن اطلاعات مبنی بر غیر قابل دسترسی بودن تصویر، یک تصویر پیش فرض به هاست مربوطه ارسال گردد. تصویر مربوطه میتواند حاوی متنی با عنوان مثلا "لینک مستقیم مجاز نیست" یا ... باشد.
در این صورت باید خطوط کد زیر تغییر کنند و به جای این کدها :
if (isset($email)) {
mail( $email, "Bandwidth Theft Alert",
"WARNING:\n\n$referrer\ntried to access\n$image\n",
"From: CHImageGuard <$email>" );
}
header( "HTTP/1.0 404 Not Found" );
چنین کدهایی در متن فایل اسکریپت نوشته شوند
if (isset($email)) {
mail( $email, "Bandwidth Theft Alert",
"WARNING:\n\n$referrer\ntried to access\n$image\n",
"From: CHImageGuard <$email>" );
}
header( "Content-type: image/gif" );
@readfile( "/your/replacement/image/filepath.gif" );
دقت کنید که به جای "/your/replacement/image/filepath.gif" باید آدرس تصویر مورد نظر خود را قرار دهید.
متن کامل اسکریپت
<?php
/*
CHImageGuard (PHP version) 1.01
Copyright 2000-2003 by Christopher Heng. All rights reserved.
*/
// ---------------- CONFIGURABLE SECTION -----------------
// Please modify the following or it will not work on
// your website.
// Where did you actually put your images?
// Make sure that the path you put below ends with
// a directory slash ("/"). The script below assumes it.
$imagedir = "/put/your/full/image/directory/path/here/" ;
// What are the websites (hostnames) that can use this
// image?
// If your site can be accessed with or without the
// "www" prefix, make sure you put both here. Do not put
// any trailing slashes ("/") nor any "http://" prefixes.
// Follow the example below.
$validprefixes = array (
"thesitewizard.com",
"www.thesitewizard.com"
) ;
// What is the main page of your website? Visitors will
// be directed here if they type
// "http://www.yourdomain.com/chimage.php"
// in their browser.
$homepage = "http://www.thesitewizard.com/" ;
// What is your email address?
// If you want to be informed when someone tries to use
// this script to access an image illegitimately, you
// must uncomment (remove the "//" prefix) the following
// line and change it to point to your email address.
//$email = "yourname@yourdomain.com" ;
// ------------ END OF CONFIGURABLE SECTION ------------
// --- YOU NEED NOT MODIFY ANYTHING AFTER THIS LINE ---
function isreferrerokay ( $referrer, $validprefixes )
{
$validreferrer = 0 ;
$authreferrer = current( $validprefixes );
while ($authreferrer) {
if (eregi( "^https?://$authreferrer/", $referrer )) {
$validreferrer = 1 ;
break ;
}
$authreferrer = next( $validprefixes );
}
return $validreferrer ;
}
//----------------------- main program -----------------------
$image = $_GET['image'] ;
$referrer = getenv( "HTTP_REFERER" );
if (isset($_GET['image'])) {
if (empty($referrer) ||
isreferrerokay( $referrer, $validprefixes )) {
$imagepath = $imagedir . $image ;
$imageinfo = getimagesize( $imagepath );
if ($imageinfo[2] == 1) {
$imagetype = "gif" ;
}
elseif ($imageinfo[2] == 2) {
$imagetype = "jpeg" ;
}
elseif ($imageinfo[2] == 3) {
$imagetype = "png" ;
}
else {
header( "HTTP/1.0 404 Not Found" );
exit ;
}
header( "Content-type: image/$imagetype" );
@readfile( $imagepath );
}
else {
if (isset($email)) {
mail( $email, "Bandwidth Theft Alert",
"WARNING:\n\n$referrer\ntried to access\n$image\n",
"From: CHImageGuard <$email>" );
}
header( "HTTP/1.0 404 Not Found" );
}
}
else {
header( "Location: $homepage" );
}
?>