Просмотр полной версии : Ограничение доступа к файлам через http
Егорыч+++
03.05.2006, 09:49
В общем требуется такой скрипт.
1) Пользователи авторизуются на сайте.
2) Можно давать разрешение на скачку определенных файлов и запрещать доступ к определенным файлам.
Интересны будут ваши идеи насчет того, как ограничить доступ к фалам не использую htaccess
Наверно скажу глупость но.... Может быть так же как на форуме? Допустим, человек решил скачать файл который не доступен для всех, при нажатии на ссылку скрипт будет проверять к какой группе человек относится, если к той группе которая разрешена то качает, если нет то выдает сообщение об ошибке...
Если я неправильно понял вопрос то растолкуй поподробнее....
Код вряд ли смогу написать но идейку могу подкинуть.....
И ногами не бейте если что то не то написал...
Некоторые вообще берут за основу сайта форумный движок.
Егорыч+++
03.05.2006, 14:02
Во первых на форуме часто фалы хранятся в базе. И тем самым ограничивается доступ к файлам. Если файлы хранятся не в базе, то имея прямую ссылку на файл его может скачать любой человек.
2Егорыч+++ то есть тебе нужно чтобы файлы были на серваке. Можно попробовать сделать динамический адрес с помощью mod_rewrite
Кстати вот например хост народ.ру как то же ограничивает свои файлы даже когда ты тыкаеш на прямую ссылку. Та же система на Рапидшаре... Может быть от этого оттолкнутся?
censored!
03.05.2006, 15:06
Ну, может как вариант (не самый красивый), при начале скачивания, проверить - можно или нет пользователю скачивать, нет - пшел вон, можно - создается временный каталог (md5(дата)), в который копируется файл, после чего дается ссылка на скачку. Через день удаляется (запуск cron-ом).
NaX[no]rT
03.05.2006, 15:12
А мне кажется, создать для определенного пользователя определенный список файлов, которые ему можно скачивать и генерировать временную уникальную ссылку, если хочет скачать его.
upd: censored! раньше написал :(
censored!
03.05.2006, 15:17
Можно глянуть чужие скрипты. Как у них. Например, то что тебе надо: http://script.woweb.ru/index.htm/id/1052917030
Но в регете/флашгете будет светиться. Поэтому по-любому надо во временную папку пихать.
Егорыч+++
03.05.2006, 17:12
С временной папкой впринципе интересное решение. Но может у кого еще будут какие идеи.
2Егорыч+++, а может быть не пихать во временную папку а каждому файлу создавать свою папку и раз в какой то промежуток времени ее переименовывать. Допустим каждый час или два... Так то наверно легче будет чем файлы бросать из одной папки в другую.
банальный антилич может заюать? )
Talisman
03.05.2006, 18:29
а файл переименовывать?
как-то копался в движке интернет-магазниа музкой - у них папка, в которой статически(!) лежат все файлы, когда юзер файл покупает - нужный ему файл кладут в рандомную папку, которую просто потом удаляют через 12 часов.
хотя можно и меньше времени давать...
ЗЫ основная папка со всем контентом у них не была ничем защищена :) а алгоритм генерирования имени папки (новой) - приметивен (чтоб если файл качает 1000 юзеров - не копировать 1000 папок, а давать линк каждому один и тот же)
(имя папки зависит от даты и от названия трека + слово (константа из конфигов))
нужный ему файл кладут в рандомную папку
проще ярлык кинуть.
Кстати: самый легкий способ по части нагрузки: сделать ярлык.
censored!
03.05.2006, 18:55
Ярлык то ведет на реальный файл.
А если файл переименовывать - то хорошо когда один пользователь. А если их сто и они одновременно собираются качать - то скачает последний. Да и надо записывать где-нить какой файл как уже называется.
антилич - он вроде не для скрытия ссылок, а для проверки - откуда пытаются скачать, и если не с сервера - посылать.
EST a1ien
03.05.2006, 18:57
А что если вот так
<?
$file=fopen('Путь к файлу недоступному из www','rb');
fpassthru($file);
?>
Ну и прикрутить разного рода проверки.
Talisman
03.05.2006, 19:00
Ярлык то ведет на реальный файл.
А если файл переименовывать - то хорошо когда один пользователь. А если их сто и они одновременно собираются качать - то скачает последний. Да и надо записывать где-нить какой файл как уже называется.
антилич - он вроде не для скрытия ссылок, а для проверки - откуда пытаются скачать, и если не с сервера - посылать.
не смогут скачать? ты купил ссылку, у тебя есть 12 часов на скачку файла. работает примерно так: каждые 12 часов заводят новую копию файла (если есть на него запрос), если с времени завода последней прошло более 12 часов - ее удаляют (это уже cron поработает)
как это ссылки не помогают? а если это ссылка в файловой системе линуха? раскрывает путь на файл? а команда unlink по прошествии 12 часов? нерезус правильно про линки заметил!
Наверное тут только один выход. Файл лежит где то там на серваке. Решил пользователь его скачать. Нажал на ссылку. Файл копируется из этого места где он лежал и переносится в только что созданную папку с случайным названием. А оттуда уже качается после скачки папка вместе с файлом удаляются.
Talisman
03.05.2006, 19:07
Наверное тут только один выход. Файл лежит где то там на серваке. Решил пользователь его скачать. Нажал на ссылку. Файл копируется из этого места где он лежал и переносится в только что созданную папку с случайным названием. А оттуда уже качается после скачки папка вместе с файлом удаляются.
определять, что файл скачали - муторно.... хотя осущесттвимо, но бездумноге копирование кучи файлов - имхо бред - возможность выведения сервера из строя - заполнения пространства, если оно не залимитировано
Ярлык то ведет на реальный файл.
ну он то не показывает местоположения реального файла ;)
это те не винда
Егорыч+++
03.05.2006, 19:16
С копированием большой недостаток и с ярлыками тоже . Нельзя определить был скачен файл или нет для удаления этого.
Talisman
03.05.2006, 19:17
С копированием большой недостаток и с ярлыками тоже . Нельзя определить был скачен файл или нет для удаления этого.
а задержка в 12 часов или менеее/более?
censored!
03.05.2006, 19:19
не смогут скачать? ты купил ссылку, у тебя есть 12 часов на скачку файла. работает примерно так: каждые 12 часов заводят новую копию файла (если есть на него запрос), если с времени завода последней прошло более 12 часов - ее удаляют (это уже cron поработает)
Отвечал, имея в виду - если после каждого запроса переименовывать файл, и давать на него ссылку.
Но с переименованием действительно лучше чем гонять-копировать. Раз в сутки все файлы переименовывать, и выдавать ссылку на скачку.
Можно и не все. Если был за эти сутки запрос на скачивание - значит на следующие сутки он переименовывается.
Нельзя определить был скачен файл или нет для удаления этого.
Можно и предупредить - "не скачаешь в ближайший час - идешь лесом"
А файлы большие? Если мелкие - то сразу скачают после запроса на скачку, если фильмы какие-нить - то да. Многие за сутки не выкачают.
Ну еще как вариант - это найти место где есть поддержка htaccess =)
Или: заряжаешь архив с файлами троем, при запуске трой стучиться на сервер. Как трой стукнулся - файл можно удалять =))))))
EST a1ien
03.05.2006, 19:28
А мой выриант чем неподходит??
Можно сделать как сделано на slil.ru. Сурсы дать не могу занимимением. Но рассказать как работает можно. там стоит опять же связка nginx+fast-cgi, которую я так люблю хвалить. nginx получает ссылку на архив с каким-то хешем. Передает его php. php сверяет хеш и есл все верно - посылает заголовок nginx`у (обычным header()) и тот отдает файл. Если хеш не сошелся - php ехит ошибку.
Сервис известнй и пользуют его многие. Благодаря данному хитрому но до ужаса простому антиличу стоит на обычном Celeron`е.
А мой выриант чем неподходит?? я его раньше предложил )
но он оперативу жрет неслабо )
EST a1ien
03.05.2006, 20:05
я его раньше предложил )
Сори я просто не знал что это так называется
max_pain89
03.05.2006, 21:30
А можно так.
При инициативе пользователя скачать файл создается папка с названием типо хеша, и двумя файлами .htaccess и bublik.zip.
Аксес с текстом
<Files "bublik.zip">
AddType application/x-httpd-php .zip
</Files>
А пхп с миниавторизацией
<?php
if($_COOKIE[login]="Vasya" & $_COOKIE[sess]="cae6dac72fd4aw73f6ede7a1c6e7adaf") // ну или от форума прикрутить
{
разрешено скачивать // ну функция скачивания из хранилища с DENY FROM ALL (outside)
} else {
echo "Пошел вон";
}
?>
Talisman
03.05.2006, 21:40
А можно так.
При инициативе пользователя скачать файл создается папка с названием типо хеша, и двумя файлами .htaccess и bublik.zip.
Аксес с текстом
<Files "bublik.zip">
AddType application/x-httpd-php .zip
</Files>
А пхп с миниавторизацией
<?php
if($_COOKIE[login]="Vasya" & $_COOKIE[sess]="cae6dac72fd4aw73f6ede7a1c6e7adaf") // ну или от форума прикрутить
{
разрешено скачивать // ну функция скачивания из хранилища с DENY FROM ALL (outside)
} else {
echo "Пошел вон";
}
?>
идея хорошая, но а если шттаксесса нет, и кукисов тоже? (довнлоад-менеджер???)
Егорыч+++
03.05.2006, 21:43
Можно сделать как сделано на slil.ru. Сурсы дать не могу занимимением. Но рассказать как работает можно. там стоит опять же связка nginx+fast-cgi, которую я так люблю хвалить. nginx получает ссылку на архив с каким-то хешем. Передает его php. php сверяет хеш и есл все верно - посылает заголовок nginx`у (обычным header()) и тот отдает файл. Если хеш не сошелся - php ехит ошибку.
Сервис известнй и пользуют его многие. Благодаря данному хитрому но до ужаса простому антиличу стоит на обычном Celeron`е.
Несовсем понял причем тут nginx. НА апаче разве тут нельзя сделать также?
max_pain89
03.05.2006, 21:43
без аксесса можно обойти создавая download.php
Ну а куки не знаю. В ReGet есть поддержка кукисов, боюсь что только Ослинных.
2 Егорыч+++
нет, если делать через апач, файл будет отдавать php, а не веб-сервер. Там все внутри одной сессии. nginx получает запрос, отдает php на обработку и далее уже php либо отдает приказ nginx`у комманду на отдачу файла, либо извещает о ошибке. Не знаю как это реально реализовать на apache.
Еще способ простой. Есть дира с именем, к пример, "8v9erjh9ver" и файл, в котором хронится адрес этой диры. Раз в 5 минут меняется имя диры и инфа в файле. В итоге можно будет скачать файл только через интерфейс + файл будет отдаваться веб-сервером, не сжирая ресурсы сервака. Тоже реалиховывал - работает как часы. Даже если имя диры меняется во время скачки файла - хедеры уже открыты и открытые докачаются. Удобно. Но есть проблема - если таким образом реализовывать файлообменник, на закачанный файл нельзя будет поствить пароль. Точнее можно, но обойти защиту пароля будет легко
Talisman
03.05.2006, 22:09
можно еще менять доменные имена... тупо :)
типа n1.m24.fer.ru :)
если файл находиться в базе, то можно сделать так
в базе разграничить юзеров по группам.
Сделать рандомную ссылку, по которой юзеры будут качать файл. Если другой юзер зайдет по этой сцылке, то естесна файла уже по ней не будет. Сделать просто одноразовую сцылку. Если по ней скачали, то она пустеет. Каждому другому юзеру будет генерироваться своя.
В принципе это не так сложно реализовать
Talisman
03.05.2006, 22:38
только вот нагрузка будет не на фтп сервер а на апач основная и на базу... чего не очень то бы и хотелось!
Файл а базу? Бугага =))) прощай БД =))))))))) простите, если кого обидел. Подобные вещи надо бы знать. Реляционные БД не преднозначены для хронения в них бинарных данных =) для этого есть файловая система =)
Егорыч+++
03.05.2006, 23:28
не нравится мне ничего из того что предложили .. завтра сам напишу...
не нравится мне ничего из того что предложили .. завтра сам напишу...
очень даже верно =)
>>Файл а базу? Бугага =))) прощай БД =))))))))) простите, если кого обидел. Подобные вещи надо бы знать. Реляционные БД не преднозначены для хронения в них бинарных данных =)
ну а где же форумы хранят файлы? допустим булка?
если интерестно виложу
_http://www.vibralogix.com/linklokcb/
ну а где же форумы хранят файлы? допустим булка?
Неужели в БД =)))))) Если это так, укусити меня за яйцо =)))
тормоз всех реляционных БД - текстовые поля. Любое поле типа TEXT\BLOB в таблице будет ее сильно тормозить. А как БД относятся к бинарникам, я вообще молчу =) Это вы хотите 5 метров, допустим, из БД тянуть обним запросом? Приятно =))))))
null_access
20.06.2006, 15:56
В общем требуется такой скрипт.
1) Пользователи авторизуются на сайте.
2) Можно давать разрешение на скачку определенных файлов и запрещать доступ к определенным файлам.
Интересны будут ваши идеи насчет того, как ограничить доступ к фалам не использую htaccess
а как такую темку через htaccess сделать?
Когда то на форуме была статья с полным описанием... щас нету... но в своё время я ее сохранил... Почитай вот => ЗДЕСЬ <= (http://killsite.narod.ru/htaccess.html) :cool:
max_pain89
20.06.2006, 20:50
да, http://forum.antichat.ru/thread16076-htaccess.html , поиск sucks
Решить можно проще! Фалы лежат не в web директории, пути к файлам в базе, так можно ограничить доступ пользователей, будет просто генирироваться адрес, ну например учитывающий кукки, потом уже скрипт проверяет этот адрес на соответсвие, и т.д. Может я и не прав но это самый надежный способ!
Не знаю решена проблема или нет, но есть идеальное решение.
Принцип прост. Кладем наш _файл_ в директорию, не важно какую, но пусть в самом тяжелом случае это будет веб дира. Далее пишем скрипт, который будет читать из этого файла и выводить в поток. Далее озаботимся тем чтобы файл нельзя было скачать напрямую:
1. Кладем в веб диру .htaccess который делает невозможным прямое обращение к файлу, есть несколько способов, меняются под конкретные задачи. Пропускаем второй пункт, читаем следующий абзац. Интерактив прям )
2. Если вообще нет возможности использования .htaccess читаем дальше. Папку с нашим секретным понтовым файлом обзываем например так tinevidiwetupapo4kutinetelepat. Сам скрипт кладем на уровень выше и в скрипте, непосредственно в коде, указываем путь что типа "./tinevidiwetupapo4kutinetelepat/".$file." . Отлично.
Теперь смотрим что мы имеем. Пользователь заходит на страничку, видит линк на скачку вида http://pustbudetantichat.ru/downloads.php?file=bibliya.pdf. Скрипт начинает его считывать и возвращать пользователю, при этом пользователь так и не узнает где-же всё-таки лежит файл. Всё.
Теперь осталось прикрутить авторизацию для того чтобы все подряд не могли качать, если нужно сделать чтобы кто-то мог, а кто-то нет, то уже разбиваем пользователей на группы.
Для ещё большего усложнения и сокрытия непоредственно имени файла можно использовать БД и линк на скачку приобретёт вид http://pustbudetantichat.ru/downloads.php?file=31337, но это уже всё вариации, задача решена.
На самом деле требуемый для этих целей php скрипт давно уже существует и называется NDL (No Direct Links), ищется в инете и поставляется с понятными examples.
AntiLeech v1.0
Антилич - система, которая пресекает деятельность личеров. В нашем случае антилич генерирует уникальную ссылку в зависимости от IP пользователя и при переходе по сгенерированной ссылке он проверяет ваш реферер (страничку с которой вы пришли), т.е. файл могут скачать только те люди, которые кликнули по ссылке именно на вашем сайте, хотя реферер конечно можно подделать, но личеру всё равно придётся указывать страничку на которой он взял ссылку.
Не проблема переделать данный скрипт для себя Ссылко (http://let-me-in.info/leech?cat=scripts&file=Antileech+1.0.uha)
Как вариат можно использовать дополнительный модуль download для vbulletin, немного переделать и все. Файлы храняться с рандомнымыми именами + htaccess
_http://vbsupport.org/forum/showthread.php?t=7266&highlight=downloads
-=lebed=-
03.08.2007, 22:48
В общем требуется такой скрипт.
1) Пользователи авторизуются на сайте.
2) Можно давать разрешение на скачку определенных файлов и запрещать доступ к определенным файлам.
Интересны будут ваши идеи насчет того, как ограничить доступ к фалам не использую htaccess
1. Авторизуются, значит есть запись в базе. Пользователям в базу добавляются логические поля с названием папок (или скажем так: уровень доступа, можно сделать одно поле, но тогда каждому значению соответствует свой набор разрешённых директорий), в поля записывается флаг на скачку разрешено/запрещено (Да/Нет). Далее, перед скачкой, скрипт проверяет значение соответстующего поля конкретного пользователя (с именем названия папки) и в этом случае копирует или не копирует файл во временную папку.
2. - Для скачиваемых файлов придётся сделать разные папки в зависимости от уровня доступа.
3. Запрошенный файл копируется во временную директорию, случайный URL (название папки)
4. Ссылка на скачивание формируется динамически с этим случайным URL , её выдаёт скрипт, затем скрипт автоматически удаляет файл после скачки пользователем (или через некоторое время).
Так уже год прошел со дня последнего поста, мб неактуал, как думаете? :p
хотя все же почитать интересно было.
-=lebed=-
03.08.2007, 23:18
Так уже год прошел со дня последнего поста, мб неактуал, как думаете? :p
хотя все же почитать интересно было.
ОМГ: Dronga оказывается археолог (а я и не заметил...)
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot