[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Авторизация через сессию не закрывает картинки, к
mooncar
Сделал авторизацию на сайте через внедрение скрипта авторизации на все страницы. Через сессию. Все работает, как надо, да не совсем. Если вбить прямой путь в строке до загружаемых картинок,которые хранятся в отдельной директории, то браузер естественно все выдает на ура. Не могу сообразить как поступить.
Есть вариант - закрыть папку с картинками с помощью .htaccess, а картинки выводить с помощью скрипта с графическими функциями, так как серверным скриптам htaccess не указ. Естественно тогда нужно защищать еще и этот сам этот гарфический скрипт.
Мне кажется, что как-то криво все получается.
Как поступают в случаях, когда нужно защитить не только определенные страницы, но и картинки, в них выводимые?
Создавать спецкаталог для них, защищать его через htaccess и писать для страниц, использующих картинки из него, специальный запрос с логином-паролем, типа как тут:
PHP
<?php

$login 
'login';
$passw 'password';

$authBasic 'Authorization: Basic 'base64_encode($login .':'$passw);

// Опции для потока
$opts = array

   
'http' => array 
   (
       
'method' => 'GET',
       
'header' => $authBasic ."\r\n"
   
)
);

$context stream_context_create($opts);

// Получение файла
$file file_get_contents('http://www.example.com/'false$context);


Или это вообзще ахинея?
Подскажите, пожалуйста, я совсем запутался, а сроки поджимают.



Спустя 15 минут, 8 секунд (18.05.2009 - 22:54) jetistyum написал(а):
если очень нужно защищать, то можно с помощью .htaccess перенаправить все ссылки на один обработчик.... и в зависимости от того, авторизирован ли человек, или нет - разрешать или нет загружать картинку ...
может быть есть еще какой-нить апаче модуль... который умеет управлять этим....
а вообще чаще всего это просто не защищают... посмотри vkontakte, flickr и прочие сервисы.

Спустя 9 минут, 20 секунд (18.05.2009 - 23:04) mooncar написал(а):
Цитата (jetistyum @ 18.05.2009 - 19:54)
если очень нужно защищать, то можно с помощью .htaccess перенаправить все ссылки на один обработчик.... и в зависимости от того, авторизирован ли человек, или нет - разрешать или нет загружать картинку ...

Про перенаправление через htaccess я знаю, у меня в начале каждой защищаемой страницы с помощью того же htaccess внедряется скрипт, заменяющий содержание на форму логина, если не продолжена авторизованная сессия.

А вот как быть, если юзер просто вбивает в строку адреса что-то вроде
http://www.domain.ru/...../fotobank/1.jpg

Неужеди все тупо на это забивают или все-таки кладут туда .htaccess и по хитрому через дополнительную авторизацию вместо <img src=".." />
вынимают оттуда картинки для уже авторизованной страницы?

То есть если ссылка стоит на защищенной странице, то к ней нет доступа, и значит и картинки недостурны, а если знаешь или подобрал путь, то вуаля - и все видно?

Спустя 17 минут, 48 секунд (18.05.2009 - 23:21) jetistyum написал(а):
Цитата


у меня в начале каждой защищаемой страницы с помощью того же htaccess внедряется скрипт, заменяющий содержание на форму логина, если не продолжена авторизованная сессия.


.htaccess встудию, интересно, что за реализация такая...


если ссылка стоит на защищенной странице - страница просто не отображается... зайди для примера на закрытую страницу просмотра фото vkontakte ....
но если я дам тебе ссылку на конкретный файл на конкретном сервере, файл откроется


Спустя 1 минута, 38 секунд (18.05.2009 - 23:23) jetistyum написал(а):
не имеет смысла защищать прямое обращение к файлам..... если только у тебя нет например файл-хранилища "платного"... да и даже если так, если у человека хватит мозгов посмотреть сурсы и отправить ссылку на картинку... то хватит мозгов пересохранить картинку на файлхостинге... открытом.. вот


Спустя 8 минут, 1 секунда (18.05.2009 - 23:31) mooncar написал(а):
Цитата (jetistyum @ 18.05.2009 - 20:21)
Цитата


у меня в начале каждой защищаемой страницы с помощью того же htaccess внедряется скрипт, заменяющий содержание на форму логина, если не продолжена авторизованная сессия.


.htaccess встудию, интересно, что за реализация такая...


если ссылка стоит на защищенной странице - страница просто не отображается... зайди для примера на закрытую страницу просмотра фото vkontakte ....
но если я дам тебе ссылку на конкретный файл на конкретном сервере, файл откроется

Внедрение в любую страницу каталога нужного скрипта делается с помощью установки изменения переменной окружения auto_prepend_file с неопределенного параметра по умолчанию на абсолютный путь к форме с логином.
Об этом я узнал сегодня из учебника. smile.gif
Но поскольку переменную окружения у хостера я поменять не могу, попробовал сделать это через htaccess:
php_value auto_prepend_file "/home/../.../.../auth_user.php"
Работает!
Добавляешь такую строку в htaccess и все страницы получают в начале кода твой auth_user.php, или любую твою байду, какую захочешь.

Спустя 10 минут, 28 секунд (18.05.2009 - 23:41) mooncar написал(а):
Цитата (jetistyum @ 18.05.2009 - 20:23)
если только у тебя нет например файл-хранилища "платного"...

Именно тот случай.
В общем я придумал. Придется реализовать то, что говорил в начале.
В фотобанке будет лежать htaccess с запретом на любую передачу в браузер или еще куда по HTTP.
Картинки выводить будет не ссылка <img src=".." />, а вот так:
HTML
<img src="printimage.php?infile=/home/.../fotobank/11.jpg"/>

А скрипт, генерирующий картинку, printimage.php будет лежать там же где и защищаемые страницы, со своим htaccess, внедряющим код авторизации.
Поскольку в негно тоже будет добавляться скрипт авторизации из auth_user.php, то его просто так из браузера тоже не вызовешь просто из адресной строки.
Только с авторизованной сессией все будет доступно.
Во!
Или все-таки лучше с помощью Basic Authentication все запаролить и голову не ломать?

Спустя 14 минут, 8 секунд (18.05.2009 - 23:56) jetistyum написал(а):
забавный подход.. делать инклюд не через инклюд, а через переменную конфигурации php
иногда создается впечатление, что учебники пишут те люди, кого программистом работать никуда не взяли...

если ты не используешь один какой-то интерфейс, а разные.... то обычно в каждый файл просто руками прописывается подключаемый файл...
у нас была такая практика..
require_once 'common.php';
а в коммоне - инициализация бд, обьекта шаблона.... и проверка на авторизацию, и в случае если нет - редирект на страницу авторизации..


в случае когда используется единый интерфейс (bootstrapper) (все запросы перенаправляются на один файл, для примера - index.php) .... то тебе все что нужно достаточно сконфигурировать в одном месте...
тут можно почитать детальнее
http://www.serversidemagazine.com/php/bootstrap-php-code
хочешь - поищи на русском..


Спустя 5 минут, 34 секунды (19.05.2009 - 00:01) jetistyum написал(а):
а сможешь ли ты привязать basic_auth к авторизации через php ??? я не использовал ее.. не в курсе... а форма авторизации через попап стандартный браузерный - не комильфо sad.gif

а имаджи можно отображать нормальными ссылками
<img src="img/11.jpg"/>

только через .htaccess прописываешь хэндлер для изображений
RewriteRule ^img/([0-9]{1,2}.jpg)?$ /img.php?img=$1 [L]
или как-то так, я ща после пива не очень хорошо регулярки помню smile.gif)

а то чувствую что ты сам себе эксплойт напишешь...



Спустя 3 минуты, 18 секунд (19.05.2009 - 00:04) mooncar написал(а):
Спасибо за дельные советы! Я еще очень и очень плаваю в PHP, и авторизацию тоже из учебника взял.
В общем-то тут прямо говорится, цитирую:
"Это (авторизация) можно сделать просто: установив параметр auto_prepend_file в конфиг. файле php.ini равным абсолютному пути к данному файлу. (Тут идет пример, который я уже привел).
Другой вариант состоит в подключении протоколирующего сценария в начало каждой Web-страницы, находящейся в защищеной пароем области сайта. Сценарий должен подключаться в начале каждой страницы, до отправки каких-либо HTML-тегов или текста"
В общем, они не безнадежны smile.gif
Но, насколько я понял - это дело вкуса и конкретных требований. Может быть кому-то (мне например) удобнее сделать внедрение по умолчанию для всех, и только сделать список исключений.

Но спасибо, я все-таки подумаю над единым перенаправлением.
Только вот что. Ты писал:
"в случае когда используется единый интерфейс (bootstrapper) (все запросы перенаправляются на один файл, для примера - index.php) .... то тебе все что нужно достаточно сконфигурировать в одном месте..." - ты имел ввиду перенаправление через htaccess?


Спустя 3 минуты, 34 секунды (19.05.2009 - 00:08) mooncar написал(а):
Цитата (jetistyum @ 18.05.2009 - 21:01)
а сможешь ли ты привязать basic_auth к авторизации через php ??? я не использовал ее..

Я тоже, но вот нашел сегодня кусок кода на другом форуме, говорят, работает:
PHP
<?php

$login 
'login';
$passw 'password';

$authBasic 'Authorization: Basic 'base64_encode($login .':'$passw);

// Опции для потока
$opts = array

   
'http' => array 
   (
       
'method' => 'GET',
       
'header' => $authBasic ."\r\n"
   
)
);

$context stream_context_create($opts);

// Получение файла
$file file_get_contents('http://www.example.com/'false$context);

header('Content-type: image/jpeg'true);
echo 
$file;


Спустя 3 минуты, 33 секунды (19.05.2009 - 00:12) mooncar написал(а):
Цитата (mooncar @ 18.05.2009 - 21:04)
ты имел ввиду перенаправление через htaccess?

Все, вопрос снимается! Прошел по твоей ссылки и нежно так в конце стоит:

Цитата
After we set up the bootstrap file, we have to direct all request to this file. This is usually achieved with the help of a few rewrite rules in a .htaccess file in our root directory (or that directory where the index.php file is stored).

Спустя 7 минут, 44 секунды (19.05.2009 - 00:19) mooncar написал(а):
Цитата (jetistyum @ 18.05.2009 - 21:01)
а имаджи можно отображать нормальными ссылками
<img src="img/11.jpg"/>

только через .htaccess прописываешь хэндлер для изображений
RewriteRule ^img/([0-9]{1,2}.jpg)?$ /img.php?img=$1 [L]

Это похоже и есть решение всего.
Может точно вспомнишь или ссылку дашь?

Спустя 59 минут, 37 секунд (19.05.2009 - 01:19) jetistyum написал(а):
эт не вспомнишь, это потестить нужно smile.gif ща посмотрю..


Спустя 26 минут, 48 секунд (19.05.2009 - 01:46) jetistyum написал(а):
так вот

Код
RewriteEngine on
RewriteRule ^img/(.+)$ image.php?img=$1 [NS,L]


Спустя 1 час, 11 минут, 38 секунд (19.05.2009 - 02:57) mooncar написал(а):
Спасибо!
Попробую с этим.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.