как заблокировать показ картинок на других сайтах?

S
На сайте с 25.11.2007
Offline
143
1653

т.е. ситуация такая - люди размещают картинки с моего сайта на своих сайтах/блогах картинки что не сколько грузит мой хостинг сколько выжирает кучу трафа

Himiko
На сайте с 28.08.2008
Offline
560
#1

Ссылки генерируются скриптом (например show.php?id=1) или они на самом деле находятся на сервере по этому пути (/photo/1.jpg) ?

Профессиональное администрирование серверов (https://systemintegra.ru). Круглосуточно. Отзывы (/ru/forum/834230) Лицензии (http://clck.ru/Qhf5) ISPManager,VDSManager,Billmanager e.t.c. по низким ценам.
S
На сайте с 25.11.2007
Offline
143
#2

на самом деле находятся на сервере по этому пути (/photo/1.jpg)

UB
На сайте с 07.04.2007
Offline
22
#3

Можно сделать используя rewrite engine. Для Apache и PHP это будет выглядеть примерно так:

1. В каталоге /photo создаём файл .htaccess следующего содержания:

<FilesMatch "\.(gif|jpg|png)$">

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*)$ /img.php [T=application/x-httpd-php,L,QSA]
</FilesMatch>
Так мы включаем для всех gif, jpeg и png файлов перенаправление на скрипт img.php

2. Создаём в корне сайта файл img.php

<?php

// Определяем по рефереру с этого же домена запрашивается картинка
$p = strpos($_SERVER['HTTP_REFERER'], 'http://'.$_SERVER['SERVER_NAME']);
// Если не с этого - возвращаем пустой ответ
if($p===false || $p!=0) exit;
// Читаем изображение с диска
$fl = $_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'];
$info = @getImageSize($fl);
$img = @imageCreateFromString(file_get_contents($fl));
// Отдаём изображение
header("Content-Type: ".$info['mime']);
switch ($info[2]) {
case 1:
imageGIF($img);
break;
case 2:
imageJPEG($img);
break;
case 3:
imagePNG($img);
break;
}
imageDestroy($img);
?>
Himiko
На сайте с 28.08.2008
Offline
560
#4
Usama Bin Laden:
Можно сделать используя rewrite engine. Для Apache и PHP это будет выглядеть примерно так:
1. В каталоге /photo создаём файл .htaccess следующего содержания:
<FilesMatch "\.(gif|jpg|png)$">
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*)$ /img.php [T=application/x-httpd-php,L,QSA]
</FilesMatch>
Так мы включаем для всех gif, jpeg и png файлов перенаправление на скрипт img.php

2. Создаём в корне сайта файл img.php
<?php
// Определяем по рефереру с этого же домена запрашивается картинка
$p = strpos($_SERVER['HTTP_REFERER'], 'http://'.$_SERVER['SERVER_NAME']);
// Если не с этого - возвращаем пустой ответ
if($p===false || $p!=0) exit;
// Читаем изображение с диска
$fl = $_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'];
$info = @getImageSize($fl);
$img = @imageCreateFromString(file_get_contents($fl));
// Отдаём изображение
header("Content-Type: ".$info['mime']);
switch ($info[2]) {
case 1:
imageGIF($img);
break;
case 2:
imageJPEG($img);
break;
case 3:
imagePNG($img);
break;
}
imageDestroy($img);
?>

+1

Я это и хотел посоветовать.)

Roxis
На сайте с 19.11.2006
Offline
40
#5

-2

За отдачу реального файла через php скрипт и

за ненужную конвертацию изображения.

UB
На сайте с 07.04.2007
Offline
22
#6

Roxis Вы правы. Каюсь. Тормознул. Достаточно написать только .htaccess такого рода:

<FilesMatch "\.(gif|jpg|png)$">

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://www\.site\.ru [NC]
RewriteCond %{HTTP_REFERER} !^http://site\.ru [NC]
RewriteRule .* - [F]
</FilesMatch>
Просто я это сделал скриптом, так как ещё водяные знаки рисую на картинках.
RAS
На сайте с 27.11.2005
Offline
126
RAS
#7
Usama Bin Laden:
Roxis Вы правы. Каюсь. Тормознул. Достаточно написать только .htaccess такого рода:
<FilesMatch "\.(gif|jpg|png)$">

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://www\.site\.ru [NC]
RewriteCond %{HTTP_REFERER} !^http://site\.ru [NC]
RewriteRule .* - [F]
</FilesMatch>
Просто я это сделал скриптом, так как ещё водяные знаки рисую на картинках.

Только это не учитывает тех, у кого поле HTTP_REFERER блокировано фаерволом, типа агнитум и поисковые системы.

Администрируем сервера, впс, вдс. Ускоряем загрузку сайтов - DLE, Word Press, Joomla, Modx... Настраиваем безопасность. Ручная чистка rootkit/malware/вирусов. (/ru/forum/867860) Разработка - shell/bash/sh/python/perl.
MoMM
На сайте с 16.06.2006
Offline
727
#8

посомтрите в панелке хостинга - в некоторых (к примеру cPanel) есть hotlinkprotection... там просто ставите расширения файлов, которые не должны отдаваться на сторону - архивы, картинки и т.п. и можно со скриптами не возиться...

Himiko
На сайте с 28.08.2008
Offline
560
#9
Roxis:
-2
За отдачу реального файла через php скрипт и
за ненужную конвертацию изображения.

Блин... а вы правы)

Jefa
На сайте с 01.02.2007
Offline
191
#10

Способ 1

RewriteCond %{HTTP_REFERER} !^$

RewriteCond %{HTTP_REFERER} !^http://(www\.)?вашсайт\.ru/ [nc]

RewriteCond %{HTTP_REFERER} !^http://(www\.)?google\.com/ [nc] - доступ Гуглю открыт

RewriteRule .*\.(gif|jpg|png)$ http://вашсайт.ru/images/hotlinkers.jpg [nc]

RewriteRule \.(jpe?g|gif|png)$ - [F] - эту строчку можно подставить вместо последней, чтобы перенаправлять на 403 Forbidden вместо картинки.

Когда к серверу идет запрос на файл с расширением (gif|jpg|png), и этот запрос не с вашего сайта, то запрашиватель отправляется прямиком к картинке http://вашсайт.ru/images/hotlinkers.jpg, которая может быть расположена по вашему усмотрению и на ней может быть все что угодно.

_______

Способ 2

RewriteEngine On

RewriteCond %{HTTP_REFERER} ^http://(www\.)?zloylicher\.net/ [NC,OR]

RewriteCond %{HTTP_REFERER} ^http://(www\.)?esheodin\.com/ [NC]

RewriteRule \.(jpeg|gif|png)$ images/hotlinkers.jpg [R,L]

запрет на запрос к картинкам выдается только конкретным сайтам

_______

Способ 3

- здесь вписать нужные форматы
RewriteEngine on
RewriteCond %{HTTP_REFERER} ^http://(www\.)?zloylicher\.com/ [NC,OR]
RewriteCond %{HTTP_REFERER} ^http://(www\.)?esheodin\.com/ [NC]
RewriteCond %{REQUEST_FILENAME} !hotlinkers.jpg$
RewriteRule .*\.(gif|jpe?g|png|bmp|pdf|zip|rar|mp3|js)$ http://www.mysite.com/images/hotlinkers.jpg [R]

Защищаем все файлы.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий