kovyilin, тока что ради интереса сделал тест драйв. Правда вместо имага отдавал CSS-файл, просто мне так удобней было.
1) Типа главная страница, где была бы картинка - ссылко
<?phpsession_start();$random = md5(rand(0,1000000));$_SESSION['goOut'] = $random;?><!DOCTYPE HTML><html><head><title>Test with security image</title><?php echo '<link rel="stylesheet" href="/work/css.php?token=' .$random .'" type="text/css" />'; ?></head><body>Тело))</body></html><?php unset($_SESSION['goOut']); ?>
2)ПХП-скрипт(ну скрипт в этом случае это слишком), который должен защищать - ссылка
<?phpsession_start();if ($_SESSION['goOut'] == $_GET['token']){ echo 'VSe normal\'no';}else{ header("HTTP/1.1 404 Not Found"); echo 'GOROH';}?>
В итоге имеем:
1) если мы не удаляем сессионую переменную то и браузеру отдается файл нормально, и при переходе по нему.
2) Если удаляем переменную в конце, то браузер получает "GOROH" и юзер тоже при переходе по ссылке.
ЧЁНДПС:)
if (empty($_SESSION['переменная'])){ // тут 404 ошибка}else{ header('Content-type: image/png'); readfile('путь до картинки');}
Это спасет только от школоРиперов(тока у меня 1 это слово ассоциируется с калорифером?).
И то, на странице где подгружается картинка надо будет в конце эту сессионую переменную unset'ить.
Я тут подумал...
По моим наблюдениям, браузер сначала получает весь ХТМЛ-код со страницы, а тока потом его разбирает.
То есть, если мы удалим сессионую переменную, то когда браузер запросит картинку, он получит 404-ответ, так как эту переменную мы удалили. А если ее не удалять, то юзер также откроет в браузере страницу, где через ПХП отдается картинка и возьмет ее.
kovyilin, реализуете то, о чем написали(с основной страницей, и страницей отдачи изображения) - с меня жувачко:)
Если заходят - один фиг возьмут.
Читаем про HTTP и понимаем, что все ресурсы(изображения, JS-файлы, файлы стилей, хтмл-код) скачиваются браузером и потом уже интерпретируются.
В случае ТСа это изображение, которое браузер по-любому скачает к себе, чтобы показать юзверю. А если скачивает браузер, то что мешает хацкеру взять данные, которые приходят в браузер каким-нибудь инструментом, типа этого?
ну для БГ там другое - "сохранить фон как..."
Не знаю как щас и в каких браузерах это есть, но в мозиле хз скока времени назад такое точно было, при клике правой кнопкой по изоображению.
А еще можно так:
файл->сохранить как... (сохранение всей страницы)
Вообщем в любом случае, сделать такую защиту невозможно.
Миф разрушен:)
1) Рефер подделывается.
2) Да какая разница в чем хранить картинку. То что хочет ТС невозможно из-за того, что картинку эту мы полюбому должны отдать клиенту для просмотра. А раз мы отдаем ее, то юзер(похититель офигенных шапок) запросто посмотрит где и как она хранится и сопрет ее! base64 не поможет! Вы отдадите браузеру картинку в бэйс64 он ее преобразует и покажет картинку. Что мешает юзеру найти такую же преобразовывалку как в браузере?
Да и вообще!
Браузер->клик правой кнопкой->сохранить изображение как...
По Вашему мы сами были должны догадаться что у Вас еще Nginx стоит?
Ок, не отдается(настоящее время), а отдавался(прошедшее время). Так устроит?
А логика в том, чтобы понять причину!
Обратитесь на телеканал ТНТ, там есть программа "Битва экстрасенсов". Вот тока не знаю среди экстрасенсов тех есть ли веб-девелоперы или нет:(
Если сможете - гляньте логи сервера.
Посмотрите на какие запросы отдается 400-ый ответ.
Попробуйте убрать
RewriteBase /
Такие страницы он и будет исключать.
Вопрос в том, почему страницы отдают такой заголовок.
Вот, почитайте про ответы сервера.
Тут 2 варианта: либо яндекс криво запрашивает ресурс(страницу), либо Ваш хостинг криво обрабатывает запрос и отдает 400.