Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Ограничение доступа к файлам через http (https://forum.antichat.xyz/showthread.php?t=18534)

Егорыч+++ 03.05.2006 09:49

Ограничение доступа к файлам через http
 
В общем требуется такой скрипт.

1) Пользователи авторизуются на сайте.
2) Можно давать разрешение на скачку определенных файлов и запрещать доступ к определенным файлам.


Интересны будут ваши идеи насчет того, как ограничить доступ к фалам не использую htaccess

blaga 03.05.2006 13:08

Наверно скажу глупость но.... Может быть так же как на форуме? Допустим, человек решил скачать файл который не доступен для всех, при нажатии на ссылку скрипт будет проверять к какой группе человек относится, если к той группе которая разрешена то качает, если нет то выдает сообщение об ошибке...
Если я неправильно понял вопрос то растолкуй поподробнее....
Код вряд ли смогу написать но идейку могу подкинуть.....
И ногами не бейте если что то не то написал...

Otaku 03.05.2006 13:44

Некоторые вообще берут за основу сайта форумный движок.

Егорыч+++ 03.05.2006 14:02

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

blaga 03.05.2006 14:07

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

С временной папкой впринципе интересное решение. Но может у кого еще будут какие идеи.

blaga 03.05.2006 18:15

2Егорыч+++, а может быть не пихать во временную папку а каждому файлу создавать свою папку и раз в какой то промежуток времени ее переименовывать. Допустим каждый час или два... Так то наверно легче будет чем файлы бросать из одной папки в другую.

nerezus 03.05.2006 18:21

банальный антилич может заюать? )

Talisman 03.05.2006 18:29

а файл переименовывать?
как-то копался в движке интернет-магазниа музкой - у них папка, в которой статически(!) лежат все файлы, когда юзер файл покупает - нужный ему файл кладут в рандомную папку, которую просто потом удаляют через 12 часов.
хотя можно и меньше времени давать...
ЗЫ основная папка со всем контентом у них не была ничем защищена :) а алгоритм генерирования имени папки (новой) - приметивен (чтоб если файл качает 1000 юзеров - не копировать 1000 папок, а давать линк каждому один и тот же)
(имя папки зависит от даты и от названия трека + слово (константа из конфигов))

nerezus 03.05.2006 18:38

Цитата:

нужный ему файл кладут в рандомную папку
проще ярлык кинуть.


Кстати: самый легкий способ по части нагрузки: сделать ярлык.

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

Цитата:

Сообщение от censored!
Ярлык то ведет на реальный файл.

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

антилич - он вроде не для скрытия ссылок, а для проверки - откуда пытаются скачать, и если не с сервера - посылать.

не смогут скачать? ты купил ссылку, у тебя есть 12 часов на скачку файла. работает примерно так: каждые 12 часов заводят новую копию файла (если есть на него запрос), если с времени завода последней прошло более 12 часов - ее удаляют (это уже cron поработает)
как это ссылки не помогают? а если это ссылка в файловой системе линуха? раскрывает путь на файл? а команда unlink по прошествии 12 часов? нерезус правильно про линки заметил!

blaga 03.05.2006 19:04

Наверное тут только один выход. Файл лежит где то там на серваке. Решил пользователь его скачать. Нажал на ссылку. Файл копируется из этого места где он лежал и переносится в только что созданную папку с случайным названием. А оттуда уже качается после скачки папка вместе с файлом удаляются.

Talisman 03.05.2006 19:07

Цитата:

Сообщение от blaga
Наверное тут только один выход. Файл лежит где то там на серваке. Решил пользователь его скачать. Нажал на ссылку. Файл копируется из этого места где он лежал и переносится в только что созданную папку с случайным названием. А оттуда уже качается после скачки папка вместе с файлом удаляются.

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

nerezus 03.05.2006 19:08

Цитата:

Ярлык то ведет на реальный файл.
ну он то не показывает местоположения реального файла ;)
это те не винда

Егорыч+++ 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

А мой выриант чем неподходит??

Trinux 03.05.2006 19:51

Можно сделать как сделано на slil.ru. Сурсы дать не могу занимимением. Но рассказать как работает можно. там стоит опять же связка nginx+fast-cgi, которую я так люблю хвалить. nginx получает ссылку на архив с каким-то хешем. Передает его php. php сверяет хеш и есл все верно - посылает заголовок nginx`у (обычным header()) и тот отдает файл. Если хеш не сошелся - php ехит ошибку.
Сервис известнй и пользуют его многие. Благодаря данному хитрому но до ужаса простому антиличу стоит на обычном Celeron`е.

nerezus 03.05.2006 19:54

Цитата:

А мой выриант чем неподходит??
я его раньше предложил )
но он оперативу жрет неслабо )

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

Цитата:

Сообщение от max_pain89
А можно так.
При инициативе пользователя скачать файл создается папка с названием типо хеша, и двумя файлами .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

Цитата:

Сообщение от Trinux
Можно сделать как сделано на slil.ru. Сурсы дать не могу занимимением. Но рассказать как работает можно. там стоит опять же связка nginx+fast-cgi, которую я так люблю хвалить. nginx получает ссылку на архив с каким-то хешем. Передает его php. php сверяет хеш и есл все верно - посылает заголовок nginx`у (обычным header()) и тот отдает файл. Если хеш не сошелся - php ехит ошибку.
Сервис известнй и пользуют его многие. Благодаря данному хитрому но до ужаса простому антиличу стоит на обычном Celeron`е.

Несовсем понял причем тут nginx. НА апаче разве тут нельзя сделать также?

max_pain89 03.05.2006 21:43

без аксесса можно обойти создавая download.php

Ну а куки не знаю. В ReGet есть поддержка кукисов, боюсь что только Ослинных.

Trinux 03.05.2006 21:59

2 Егорыч+++
нет, если делать через апач, файл будет отдавать php, а не веб-сервер. Там все внутри одной сессии. nginx получает запрос, отдает php на обработку и далее уже php либо отдает приказ nginx`у комманду на отдачу файла, либо извещает о ошибке. Не знаю как это реально реализовать на apache.

Еще способ простой. Есть дира с именем, к пример, "8v9erjh9ver" и файл, в котором хронится адрес этой диры. Раз в 5 минут меняется имя диры и инфа в файле. В итоге можно будет скачать файл только через интерфейс + файл будет отдаваться веб-сервером, не сжирая ресурсы сервака. Тоже реалиховывал - работает как часы. Даже если имя диры меняется во время скачки файла - хедеры уже открыты и открытые докачаются. Удобно. Но есть проблема - если таким образом реализовывать файлообменник, на закачанный файл нельзя будет поствить пароль. Точнее можно, но обойти защиту пароля будет легко

Talisman 03.05.2006 22:09

можно еще менять доменные имена... тупо :)
типа n1.m24.fer.ru :)

k1b0rg 03.05.2006 22:34

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

Talisman 03.05.2006 22:38

только вот нагрузка будет не на фтп сервер а на апач основная и на базу... чего не очень то бы и хотелось!

Trinux 03.05.2006 22:43

Файл а базу? Бугага =))) прощай БД =))))))))) простите, если кого обидел. Подобные вещи надо бы знать. Реляционные БД не преднозначены для хронения в них бинарных данных =) для этого есть файловая система =)

Егорыч+++ 03.05.2006 23:28

не нравится мне ничего из того что предложили .. завтра сам напишу...

Trinux 03.05.2006 23:59

Цитата:

не нравится мне ничего из того что предложили .. завтра сам напишу...
очень даже верно =)

k1b0rg 04.05.2006 00:05

>>Файл а базу? Бугага =))) прощай БД =))))))))) простите, если кого обидел. Подобные вещи надо бы знать. Реляционные БД не преднозначены для хронения в них бинарных данных =)

ну а где же форумы хранят файлы? допустим булка?

x_Lex 04.05.2006 00:15

если интерестно виложу
_http://www.vibralogix.com/linklokcb/

Trinux 04.05.2006 01:10

Цитата:

ну а где же форумы хранят файлы? допустим булка?
Неужели в БД =)))))) Если это так, укусити меня за яйцо =)))
тормоз всех реляционных БД - текстовые поля. Любое поле типа TEXT\BLOB в таблице будет ее сильно тормозить. А как БД относятся к бинарникам, я вообще молчу =) Это вы хотите 5 метров, допустим, из БД тянуть обним запросом? Приятно =))))))


Время: 13:33