Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Запрет доступа к определённым файлам на сервере


Автор: ruX 25.5.2009, 20:11
Как осуществяется ограничение прав доступа а ресурсам на сервере?
Допустим, имеется какая-то картинка на сервере. Один юзер копирует адрес на неё другому, но у другого нет прав на просмотр её. Как это реализовать? 
Пропускать вывод изображения(а того хуже если это какой-нить архив на 50 метров) через скрипт - как то не серьёзно. Писать плагин для апача - тоже не интересный вариант.
Больше ничего в голову не приходит. Если я правильно понял - то на сервере по любому логика должна проверять права, иначе никак.

Для начала хотя бы как реализовать примитив: доступ к определённой картинке может иметь только авторизированный пользователь.

Подскажите пожалуйста в какую сторону смотреть?

Автор: SneG0K 25.5.2009, 20:16
Цитата(ruX @  25.5.2009,  19:11 Найти цитируемый пост)
Пропускать вывод изображения(а того хуже если это какой-нить архив на 50 метров) через скрипт - как то не серьёзно.

А файлобменники по твоему как?

Еще как вариант .htaccess

Автор: enof 25.5.2009, 20:21
Цитата(SneG0K @  25.5.2009,  21:16 Найти цитируемый пост)
А файлобменники по твоему как?

ну уж явно не скриптом на пхп отдают.

Автор: ruX 25.5.2009, 21:32
Цитата(SneG0K @  25.5.2009,  20:16 Найти цитируемый пост)
А файлобменники по твоему как?

Поэтому и спрашиваю smile


Цитата(SneG0K @  25.5.2009,  20:16 Найти цитируемый пост)
Еще как вариант .htaccess

я посмотрел, на сколько я понял можно разве что логин-пароль использовать. Опять же авторизация должна быть на моих скриптах. Если я правильно понял можно написать модуль авторизации, но это уже не так интересно.


Цитата(enof @  25.5.2009,  20:21 Найти цитируемый пост)
ну уж явно не скриптом на пхп отдают.

Тогда стоит посмореть в сторону cgi, например на си?

Автор: SneG0K 25.5.2009, 21:35
Цитата(enof @  25.5.2009,  19:21 Найти цитируемый пост)
ну уж явно не скриптом на пхп отдают. 

А на чем по твоему? Давай не разводить холиваров

Автор: gta4kv 25.5.2009, 22:55
Цитата

ну уж явно не скриптом на пхп отдают. 

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

Автор: enof 25.5.2009, 23:05
Решь шла о файлообменниках и соответственно я сразу подумал о больших файлах и огромном количестве пользователей.
Для мелких сервисов согласен с readfile.

Автор: ruX 26.5.2009, 09:07
Значит вывод: можно пропускать через php readfile?
А как быть например с лимитом времени исполнения, устанавливать принудительно? Ведь канал у юзера может быть очень узкий. И по идее, этот лимит должен зависить от размера файла. Для картинки размером 300кб это одно, для, например, мп3 в 5метров это другое

Автор: SneG0K 26.5.2009, 09:13
Цитата(ruX @  26.5.2009,  08:07 Найти цитируемый пост)
А как быть например с лимитом времени исполнения, устанавливать принудительно?

Угу. Поставь сразу большой лимит, скрипт отработает и завершится... Если это картинки, то можно делать вывод через GDI+

Автор: bazzjr 26.5.2009, 10:17
Цитата(ruX @  25.5.2009,  20:11 Найти цитируемый пост)
Как осуществяется ограничение прав доступа а ресурсам на сервере?Допустим, имеется какая-то картинка на сервере. Один юзер копирует адрес на неё другому, но у другого нет прав на просмотр её. Как это реализовать? Пропускать вывод изображения(а того хуже если это какой-нить архив на 50 метров) через скрипт - как то не серьёзно. Писать плагин для апача - тоже не интересный вариант.Больше ничего в голову не приходит. Если я правильно понял - то на сервере по любому логика должна проверять права, иначе никак.Для начала хотя бы как реализовать примитив: доступ к определённой картинке может иметь только авторизированный пользователь.Подскажите пожалуйста в какую сторону смотреть?



Ну мне так думается все это можно реализовать посредством:

Куки + Сессии + некий идентификатор регистрации(профиля) пользователя

Идея примерно такая...

Каждый раз когда "зарегистрированный" ползователь хочет скачать какой либо файл, то в адресной строке прибавляем некий ID, который позволяет ему скачивание. Если эту ссылку дать другому пользователю, то когда пользователь коннектится, система проверяет адрес, и смотрит тот самый ID, далее проверяет КУКИ, и если все нужные данные совпадают, система дает добро на скачивание или просмотр.

Автор: icewind 26.5.2009, 10:29
Мне кажется можно обойтись без увеличения временного лимита... И без лишней нагрузки. Можно создать директорию для выдачи. При запросе к скрипту, тот создает в директории выдачи папку, название которой будет содержать  айпишнек (можно ip2long) и timestamp для обеспечения временного лимита и копирует туда нужный файл. Юзера предупредить что ссылка будет активна n часов. Далее сделать маленький скрипт, который будет проверять по названиям в директорий время создания и чистить устаревшие и повесить на крон. Можно таким образом избежать потоковой отдачи файлов средствами php... Естественно это для больших файлов... Картинки (50 - 350kb) можно и потоком отдать...

Автор: gta4kv 26.5.2009, 10:50
Цитата(enof @ 25.5.2009,  23:05)
Решь шла о файлообменниках и соответственно я сразу подумал о больших файлах и огромном количестве пользователей.
Для мелких сервисов согласен с readfile.

Из личного опыта, 2к уникальных обращений к файлу в течение часа не вызывали у сервера ничего кроме смертной скуки.

Автор: ruX 26.5.2009, 23:52
Цитата(icewind @  26.5.2009,  10:29 Найти цитируемый пост)
Можно создать директорию для выдачи. При запросе к скрипту, тот создает в директории выдачи папку, название которой будет содержать  айпишнек (можно ip2long) и timestamp для обеспечения временного лимита и копирует туда нужный файл. Юзера предупредить что ссылка будет активна n часов. 

ссылка должна быть постоянной, это обязательно


Цитата(bazzjr @  26.5.2009,  10:17 Найти цитируемый пост)
Каждый раз когда "зарегистрированный" ползователь хочет скачать какой либо файл, то в адресной строке прибавляем некий ID, который позволяет ему скачивание. Если эту ссылку дать другому пользователю, то когда пользователь коннектится, система проверяет адрес, и смотрит тот самый ID, далее проверяет КУКИ, и если все нужные данные совпадают, система дает добро на скачивание или просмотр.

Всё равно тут присутствует активная логика, т.е. пропускать изображение через скрипт.


Цитата(gta4kv @  26.5.2009,  10:50 Найти цитируемый пост)
Из личного опыта, 2к уникальных обращений к файлу в течение часа не вызывали у сервера ничего кроме смертной скуки.

Очень хочется надеятся. А если много одновременных соединений? Ведь пхп прилично памяти ест, где то видел что в среднем 8 метров на обработку 1 запроса. Или не стоит заморачиватсья с этим пока проблема не проявит себя?

Автор: ruX 30.5.2009, 13:53
Ещё кое-что обнаружил
ВКонтакте не даёт просматривать фото если ввести адрес страницы на которой она лежит. Но если знать прямую ссылку на изображение(в том числе и на большую аватару), то можно даже не логинившись просматривать.
Это нормально?  smile 

Я подумал: если я буду пропускать через скрипт, то очень просто можно будет досить - достаточно открыть кучу соединений, они ведь не прервуться сами(учитывая что я поставлю большой лимит времени испольнения скрипта).
А если при выдачи изображения я буду проверять на количество соединений от пользователя, время между запросами, то это к запросу о правах доступа к БД добавиться ещё и проверка интервалов времени запросов

Или я через чур заморачиваюсь?  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)