Forum Webscript.Ru

Программирование => PHP => Тема начата: a@mail.dux.ru от 18 Сентября 2003, 21:46:21

Название: защитите мои картинки. Плиз :)
Отправлено: a@mail.dux.ru от 18 Сентября 2003, 21:46:21
Подскажите пожалйста!

 как сделать так, что бы картинки из директории /images можно было бы смотреть только переходя на страницы на которых установлен html код
 
Например

и нельзя бы было просто набрать Мой сайт/images/2660.gif

могу переместить картинки куда угодно (в какую угодно директорию)
Название: защитите мои картинки. Плиз :)
Отправлено: Макс от 18 Сентября 2003, 23:01:51
предлагаю такой вариант:
1. картинки отдаешь скриптом
2. в скриптах используешь сессии.
Если пользователь зашел на страницу на которой
разрешен показ картинки, в сессию записывается этот факт (и время).
При вызове скрипта, отдающего картинку скрипт проверяет сессию пользовтаеля,
был ли он на такой странице за последние пару минут - если был, то выводим картинку.

Вроде выглядит работоспособным, правда к src картинки нужно SID дописывать


Можно наверное еще и через referer - но это подделать проще.
Название: защитите мои картинки. Плиз :)
Отправлено: a@mail.dux.ru от 18 Сентября 2003, 23:50:07
я не понял пункт 1. оттого пока не понятен смысл остального.

но полагаю в описном тобою варианте все равно возможен просмотр картинки прямым набором ее адреса в адресной строке браузера.
вот так например: Мой сайт/images/2660.gif

а мне хотелось бы что бы никак кроме как через php-шную страницу картинки из этой директории посмотреть было бы нельзя

Но все равно спасибо. Хотяя я может не понял тебя?? :(
Название: защитите мои картинки. Плиз :)
Отправлено: Shaitan от 19 Сентября 2003, 00:47:42
Сделай примерно так:
создай файлик или табличку в мускуле в которой будет таблица соотв. типа:
ksjdfhsdhf3542; image1.jpg
skks52352shskj; image2.jpg
далее передаешь в скрипт image.php непонятные параметры
index.html:


image.php:
#тут выдергиваешь имя файла соотв. переданной переменной(в зависимости от метода хранения таблицы соответствия)

Header("Content-type: image/jpeg");
$fd=fopen($file, "r")

   $content= fread($fd, filesize($file));
   fclose($fd);

echo $content;
?>

что-то типа того...
Название: защитите мои картинки. Плиз :)
Отправлено: a@mail.dux.ru от 19 Сентября 2003, 01:14:09
Shaitan спасибо.

Но как отобразится это на загрузку сервера?

Ясно же что этот вариант нагрузочнее для сервера чем просто вызвать картинку обычным скриптом. Типа:
 

Или я не прав?

А вообще ты накрутил. если так делать, то просто надо засунуть картинки выше корня сайта. и вызывать их тегом

а дальше вызывать как ты пишешь. Экономия получается (на базе данных или таблице соответствия).

Но все равно спасибо :)
Название: защитите мои картинки. Плиз :)
Отправлено: Макс от 19 Сентября 2003, 04:14:49
а что помешает мне ввести
http://твой_сайт.ru/images.php?image.jpeg
и посмотреть картинку

ЗЫ
[p]readfile[/p]
Название: защитите мои картинки. Плиз :)
Отправлено: Макс от 19 Сентября 2003, 04:19:21
a@mail.dux.ru
в моем сообщении смысл пункта 1 уже описан выше:
/// получаем filename
header("Content-Type: image/jpeg");
readfile($filename);
?>
Название: защитите мои картинки. Плиз :)
Отправлено: Xander от 19 Сентября 2003, 08:41:38
а вот цитата из мануала по Апачу 1.3, часть URL Rewriting Guide
может поможет?

Blocked Inline-Images

Description:
Assume we have under http://www.quux-corp.de/~quux/ some pages with inlined GIF graphics. These graphics are nice, so others directly incorporate them via hyperlinks to their pages. We don\'t like this practice because it adds useless traffic to our server.
Solution:
While we cannot 100% protect the images from inclusion, we can at least restrict the cases where the browser sends a HTTP Referer header.

RewriteCond %{HTTP_REFERER} !^$                                
RewriteCond %{HTTP_REFERER} !^http://www.quux-corp.de/~quux/.*$ [NC]
RewriteRule .*\\.gif$        -                                    [F]


RewriteCond %{HTTP_REFERER}         !^$                                
RewriteCond %{HTTP_REFERER}         !.*/foo-with-gif\\.html$
RewriteRule ^inlined-in-foo\\.gif$   -                        [F]
Название: защитите мои картинки. Плиз :)
Отправлено: Xander от 19 Сентября 2003, 08:42:55
P.S. то есть Апач проверяет, выставлена ли переменная $HTTP_REFERER, и в зависимости от этого выдает или не выдает картинку.
Название: защитите мои картинки. Плиз :)
Отправлено: a@mail.dux.ru от 19 Сентября 2003, 11:24:35
Xander

Как я понял (хоть в английском не силен) что надо изменить настройки Апача? Но я ж обычный клиент и эти действия мне недоступны.

Может что-то можно сделать с помощью .htaccess ?
Название: защитите мои картинки. Плиз :)
Отправлено: a@mail.dux.ru от 19 Сентября 2003, 11:48:12
Макс,
поясни, что это значит: 1. картинки отдаешь скриптом
? там наверное грамматическая ошибка. И мне не понятно что Точно ты имел ввиду.
Я понял это так: 1. картинки СоЗтдаешь скриптом.

Если так. то:
1) увеличиться ли нагрузка на сервер? если да, то насколько?

а в ответ на
-----------
а что помешает мне ввести
http://твой_сайт.ru/images.php?image.jpeg
и посмотреть картинку
----------

так в файле images.php я просто проверю $HTTP_REFERER и если заход не с моего сайта. то картинку не покажу
Название: защитите мои картинки. Плиз :)
Отправлено: Макс от 19 Сентября 2003, 12:59:37
> поясни, что это значит: 1. картинки отдаешь скриптом
картинки ложишь в папку, недоступную по www а все адреса картинок меняешь на

в скрипте image.php проверяешь можно ли выдавать картинку скриптом и если можно -  выдаешь ее ему:
//// проверка
...
header("Content-Type: image/jpeg");
readfile($filename);
?>
нагрузка увеличится. Насколько - не знаю, если это не порносайт - то не важно.

ЗЫ
если тебя устраивает надежность которую может обеспечить referer - то используй свой вариант. Или (что даже лучше ИМХО) вариант Xander-а. Его через .htaccess можно реализовать
Название: защитите мои картинки. Плиз :)
Отправлено: a@mail.dux.ru от 19 Сентября 2003, 13:28:30
Макс
спасибо. с \'1\' все понятно. вопрос с загрузкой остается, хоть и не порносайт, но картинки могут достигать 80-100 килобайт и посещаемость может быть высокая.

а вот про
------
вариант Xander-а. Его через .htaccess можно реализовать
------

Ничего не знаю. поясни, плиз. или где искать про это инфо?
Название: защитите мои картинки. Плиз :)
Отправлено: a@mail.dux.ru от 19 Сентября 2003, 13:29:40
ЛЮДИ!!!
Скажите, плиз, насколько увеличится загрузка сервера
при выводе картинки вместо обычного


таким образом:


в скрипте image.php проверяешь можно ли выдавать картинку скриптом и если можно - выдаешь ее ему:
//// проверка
...
header("Content-Type: image/jpeg");
readfile($filename);
?>

Это будет в разы или..?
Название: защитите мои картинки. Плиз :)
Отправлено: Макс от 19 Сентября 2003, 13:44:59
Если никто таких тестов не проводил, то никто тебе не ответит.
Можешь посмотреть, насколько время отдачи различается:
пишешь скрипт, который будет выводить картинку.
Берешь apache benchmark и сравниваешь насколько /images/2660.gif быстрее чем image.php?img=2660.gif
Название: защитите мои картинки. Плиз :)
Отправлено: a@mail.dux.ru от 19 Сентября 2003, 13:58:04
Макс
очень смешно.
если бы я знал как это сделать, наверное, знал бы и все остальное :)
Название: защитите мои картинки. Плиз :)
Отправлено: Yukko от 19 Сентября 2003, 14:11:33
a@mail.dux.ru
над тобой никто не смеется...

a@mail.dux.ru
Макс
о чем собственно разговор, вы чего на DX486 работаете??? или кочичество посещений огромное???

a@mail.dux.ru
Когда это будет очень сильно нагружать сервер, тебе твой хостер сам скажет... как бы ты не пытался добиться результата, сервер будет тратить процессорное время, на выполнение действий по контролю HTTP_REFERER....
Цитировать
Макс:
недоступную по www

Цитировать
a@mail.dux.ru:
Но я ж обычный клиент

Что-то мне подсказывает, что у товарища нет доступа к другим папкам, которые недоступны из ввв... (могу ошибаться)
Цитировать
a@mail.dux.ru:
Это будет в разы или..?

нет
Название: защитите мои картинки. Плиз :)
Отправлено: Макс от 19 Сентября 2003, 16:57:23
a@mail.dux.ru
что такое apache benchmark знаешь ? Вроде в последних версиях  с апачем поставляется. Хотя я под винду его из инета отдельно скачивал (ab.exe)
Дока с описанием использования также есть в документации, поставляемой с апачем.
Название: защитите мои картинки. Плиз :)
Отправлено: a@mail.dux.ru от 19 Сентября 2003, 18:47:52
Макс
спасибо за совет, но для меня это слишком сложная задача. :)
Так я и весь аппачь смогу переписать, если все буду знать и уметь. А на девченок и веремени не останется :(
Название: защитите мои картинки. Плиз :)
Отправлено: Xander от 19 Сентября 2003, 23:01:33
a@mail.dux.ru
девчонки, они через о пишутся.
А касательно дела - по-моему проще всего сделать через .htaccess
выясни только у хостера, включен ли у него mod_rewrite. Тогда тебе не придется ничего менять в существующем html-коде, и.т.д, и.т.п.
А то наделаешь скриптов, ссылки все перепишешь, а потом придется обратно менять.
Название: защитите мои картинки. Плиз :)
Отправлено: a@mail.dux.ru от 20 Сентября 2003, 00:09:13
Я нашел простое но своеобразное решение.
Не знаю, насколько оно надежное. Хотелось бы услышать ваше мнение:

картинка должна показываться на странице page.php
в ней ставим тег:

содержимое файла myphoto.php :

header("Location: imaaaaaa/mypicture.jpg");
exit; ?>

смысл в том, что посетитель не знаект в какой директории находятся картинки. Не знаю, на сколько это надежно. но правая кнопка по картинке дает myphoto.php

названия картинок передаются через сессии. примерно, как и предлагал мне Макс (но без базы и таблицы соотв. они не нужны)

Ваше мнение, очень мне интересно.
Если это глупо, то просьба объясить в двух словах, почему. Спасибо.
Название: защитите мои картинки. Плиз :)
Отправлено: a@mail.dux.ru от 20 Сентября 2003, 00:16:39
Xander про девчонок спасибо :)
 
в .htaccess я работал только с 404 ошибкой.

Прочел в интернет описание о возможностях htaccess , но так и не понял, что надо сделать, намекни, в каком направлении искать.

Спасибо
Название: защитите мои картинки. Плиз :)
Отправлено: Yukko от 20 Сентября 2003, 13:21:32
a@mail.dux.ru
прочитай тред внимательно

Цитировать
Xander:
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://www.quux-corp.de/~quux/.*$ [NC]
RewriteRule .*\\.gif$ - [F]


RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !.*/foo-with-gif\\.html$
RewriteRule ^inlined-in-foo\\.gif$ - [F
Название: защитите мои картинки. Плиз :)
Отправлено: a@mail.dux.ru от 20 Сентября 2003, 13:36:07
Yukko, прочитал внимательно, как и было сказано.
Но увы ничего толком не понял. Я это еще не выучил.
Понял что это правила какие-то: что если файл запрошен не с  http://www.quux-corp.de/~quux/.* - то ничего не получишь. И что скорее всего это надо в .htaccess сунуть.
Сунул. с исправлениями. выдало мне 500 ошибку. Так что пошел дальше разбираться.
Название: защитите мои картинки. Плиз :)
Отправлено: Меняздесьдавнонет от 20 Сентября 2003, 14:51:07
Все хотел сказать, да недосуг было.

Надо помнить, что сейчас большое распространение получили всякие домашние файрволлы, баннерорезалки и прочая лабудень.
которая, в числе прочего, режет заодно и реферер.
Так что, честный юзера могут вполне себе остаться с носом.

JFYI
Название: защитите мои картинки. Плиз :)
Отправлено: Меняздесьдавнонет от 20 Сентября 2003, 14:51:37
Цитировать
a@mail.dux.ru:
выдало мне 500 ошибку. Так что пошел дальше разбираться.

Надеюсь, разбираться ты пойдешь прямиком в логи апача.
Название: защитите мои картинки. Плиз :)
Отправлено: Yukko от 20 Сентября 2003, 15:38:35
Цитировать
RomikChef:
прочего, режет заодно и реферер

Norton Internet Sequrity, Zone Alarm и т.д. примерно 7% посетителей моего сайта пользуются подобным счастьем.
[off]мочил бы...[/off]
Название: защитите мои картинки. Плиз :)
Отправлено: a@mail.dux.ru от 20 Сентября 2003, 15:49:42
RomikChef , ну это ты хватанул, про "ты пойдешь прямиком в логи апача". Сначала я найду, куда они у меня пишуться. :)) Никогда к ним не обращался раннее.
Название: защитите мои картинки. Плиз :)
Отправлено: Yukko от 20 Сентября 2003, 16:21:51
a@mail.dux.ru
/var/log/httpd