Антилич на PHP:// Не дадим свое родное ...
Если Вам знакома ситуация, когда траффик идет, а народу на сайте нет. Либо Вы частенько замечаете, что ваши картинки и фотографии размещают на других сайтах при этом указывая прямую ссылку на ваш документ. Пользы от такого ноль, а потому с этим надо бороться. В этой статье будет рассмотрен способ реализации посредством php и небольшой записи в .htaccess
Вариант конечно не сильно гуманный, но в некоторых случаях, может оказаться полезным.
Приступим.
Допустим, кто то разместил прямую ссылку на вашу программу. Программа будет лежать в папке data. Все её качают, а про вас никто не знает.
Теория: Для контроля, кто откуда пришел, будем использовать наш либимый PHP, для этого перенаправим все запросы на него и в случае если все хорошо, то скрипт нам файл и отдаст.
Минусы: Если к примеру вы хотите защитить картинки и изображения, то лучше это сделать через .htaccess.
Реализация
Для начала в защищаемой папке создадим файл .htaccess В него засунем две строчки.
RewriteEngine On
RewriteRule (.*) index.php
Тем самым все обращения будут идти к файлу index.php
Далее.
Создаем файл index.php со следующим содержимым.
$file = pathinfo($_SERVER['REQUEST_URI']);
$filename = $file['basename']; //Смотрим, какой файл запросили
// лимит времени выполнения
set_time_limit(0);
$self = pathinfo($_SERVER['PHP_SELF']);
$self = $self['dirname']; //Смотрим из какой папки вызван скрипт.
if(!is_file($_SERVER['DOCUMENT_ROOT']."$self/".$filename)){
echo "Файл не найден";
return;
}
// А теперь главное. Запоминаем откуда, к нам пришел посетитель
$refer = $_SERVER['HTTP_REFERER'];
if(!strstr($refer,$_SERVER['SERVER_NAME'])){ // Если не с нашего района, то ...
echo "<html><head><META http-equiv=Content-Type content=\"text/html; charset=windows-1251\"></head><body>";
echo "<center><h1>ЙУХ тебе а не файл...</h1></center>";
echo "</body></html>";
return;
}
$f = fopen($filename, 'rb'); // Открываем файл и отдаем клиенту.
if (isset($_SERVER['HTTP_RANGE'])) { // поддерживается ли докачка
$range = $_SERVER['HTTP_RANGE'];
$range = str_replace('bytes=', '', $range);
$range = str_replace('-', '', $range);
if ($range) fseek($f, $range);
}
// если есть смещение
if ($range) {
header($_SERVER['SERVER_PROTOCOL'].' 206 Partial Content');
} else {
header($_SERVER['SERVER_PROTOCOL'].' 200 OK');
}
header( 'Last-Modified: '.date('D, d M Y H:i:s T', filemtime($filename)) );
header('Content-Length: '.($filesize-$range));
header('Accept-Ranges: bytes');
header('Content-Range: bytes '.$range.'-'.($filesize - 1).'/'.$filesize);
header('Content-Type: application');
header('Content-Disposition: attachment; filename="'.$filename.'"');
ini_set('output_buffering', 0);
ini_set('zlib.output_compression', 0);
while( !feof($f) ) {
ob_start();
echo fread($f, $speed);
ob_flush();
ob_end_flush();
sleep(1); // засыпаем
}
// закрываем файл
fclose($f);
Вот таким нехитрым способом, мы сможем отвадить всех жедающих ....
Опубликовано: 2010-03-15 12:37:17 shadx
Комментарии
| filin |
а как защетить ссылки видео с плеера когда смотрят видаёт прямую ссылку как зделать чтоб нельзя было украсть ссылку
|
|
| Anti |
filin, Этим скриптом этого не сделаешь. Чтобы спрятать ссылки лучше всего симлинки делать и по крону их чистить.
|
|
|
Оставить комментарий:
|
|