Милованов Ю.С

Милованов Ю.С
Рейтинг
196
Регистрация
24.01.2008
Должность
PROgrammer
Интересы
Автомобили, рыбалка, охота

kovyilin, тока что ради интереса сделал тест драйв. Правда вместо имага отдавал CSS-файл, просто мне так удобней было.

1) Типа главная страница, где была бы картинка - ссылко


<?php
session_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)ПХП-скрипт(ну скрипт в этом случае это слишком), который должен защищать - ссылка


<?php
session_start();
if ($_SESSION['goOut'] == $_GET['token'])
{
echo 'VSe normal\'no';
}
else
{
header("HTTP/1.1 404 Not Found");
echo 'GOROH';
}
?>

В итоге имеем:

1) если мы не удаляем сессионую переменную то и браузеру отдается файл нормально, и при переходе по нему.

2) Если удаляем переменную в конце, то браузер получает "GOROH" и юзер тоже при переходе по ссылке.

ЧЁНДПС:)

kovyilin:
Можно, только в этом случае картинка должна отдаваться серверным скриптом.
В случае захода на страницу с картинкой на сервере инициируется сессия с какой-то переменной, скрипт отдающий картинку проверяет наличие сессии и переменную, если все ок - картинка отображается, если нет - 404

if (empty($_SESSION['переменная']))
{
// тут 404 ошибка
}
else
{
header('Content-type: image/png');
readfile('путь до картинки');
}

как-то так...

Это спасет только от школоРиперов(тока у меня 1 это слово ассоциируется с калорифером?).

И то, на странице где подгружается картинка надо будет в конце эту сессионую переменную unset'ить.

Я тут подумал...

По моим наблюдениям, браузер сначала получает весь ХТМЛ-код со страницы, а тока потом его разбирает.

То есть, если мы удалим сессионую переменную, то когда браузер запросит картинку, он получит 404-ответ, так как эту переменную мы удалили. А если ее не удалять, то юзер также откроет в браузере страницу, где через ПХП отдается картинка и возьмет ее.

kovyilin, реализуете то, о чем написали(с основной страницей, и страницей отдачи изображения) - с меня жувачко:)

Если заходят - один фиг возьмут.

Читаем про HTTP и понимаем, что все ресурсы(изображения, JS-файлы, файлы стилей, хтмл-код) скачиваются браузером и потом уже интерпретируются.

В случае ТСа это изображение, которое браузер по-любому скачает к себе, чтобы показать юзверю. А если скачивает браузер, то что мешает хацкеру взять данные, которые приходят в браузер каким-нибудь инструментом, типа этого?

DiAksID:
для baсkgroud-image 😮 ?

ну для БГ там другое - "сохранить фон как..."

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

А еще можно так:

файл->сохранить как... (сохранение всей страницы)

Вообщем в любом случае, сделать такую защиту невозможно.

Миф разрушен:)

aksis:
😂

в контексте вопроса ТС - реализуемо на пхп через проверку referera. Или хранить картинки не на сервере, а в base64.

1) Рефер подделывается.

2) Да какая разница в чем хранить картинку. То что хочет ТС невозможно из-за того, что картинку эту мы полюбому должны отдать клиенту для просмотра. А раз мы отдаем ее, то юзер(похититель офигенных шапок) запросто посмотрит где и как она хранится и сопрет ее! base64 не поможет! Вы отдадите браузеру картинку в бэйс64 он ее преобразует и покажет картинку. Что мешает юзеру найти такую же преобразовывалку как в браузере?

Да и вообще!

Браузер->клик правой кнопкой->сохранить изображение как...

По Вашему мы сами были должны догадаться что у Вас еще Nginx стоит?

Ок, не отдается(настоящее время), а отдавался(прошедшее время). Так устроит?

А логика в том, чтобы понять причину!

Обратитесь на телеканал ТНТ, там есть программа "Битва экстрасенсов". Вот тока не знаю среди экстрасенсов тех есть ли веб-девелоперы или нет:(

Если сможете - гляньте логи сервера.

Посмотрите на какие запросы отдается 400-ый ответ.

Попробуйте убрать

RewriteBase /

Такие страницы он и будет исключать.

Вопрос в том, почему страницы отдают такой заголовок.

Вот, почитайте про ответы сервера.

Тут 2 варианта: либо яндекс криво запрашивает ресурс(страницу), либо Ваш хостинг криво обрабатывает запрос и отдает 400.

Всего: 1956