Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: ASP .NET Вопрос про ограничения доступа к файлам/закачкам  (Прочитано 18045 раз)
0 Пользователей и 1 Гость смотрят эту тему.
FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« : 14-10-2009 14:13 » 

Здравствуйте.
У меня существует несколько вопросов, которые не дают мне спать и ставят под сомнение всю целесообразность написания сайта, а именно:

1. Возможно ли контролировать количество закачек в данный момент времени, и если пользователь скачивает файл1 - доступ к закачке файла2 ограничить ему страницей с неким текстом (например: В данный момент Вы уже производите скачивание "файла1".)?

2. Возможно ли контролировать количество закачек, произведённых пользователем за определённый промежуток времени (за час, за сутки, за месяц) с той целью, чтобы ограничить, например, количество закачек в час (При попытке скачать 6-ой файл выводилось бы сообщение, что превышено количество скачиваний файлов)? Если это делать через куки или сессии, то возможна ли какая-то защита от следующего алгоритма:
  2.1. Скачали - очистили куки - Скачали и т.д.
  2.2. Если делать через сессии, то каким образом очищать через промежуток времени данные о том, что пользователь уже скачал, предположим, 5 файлов в предыдущем часе, и в этом часу он снова может скачать? Проблема опять же будет в закрытии окна и начале новой сессии - данные не сохранятся, следовательно, понадобится контейнер вида реестра Windows, но не начнутся ли тогда блокировки от антивирусов за попытку изменения оного?

3. Хотелось бы узнать, как генерируются ссылки к файлам, которые прошли оплату и доступны только тем, кто оплатил их в данный момент? Ведь если эту ссылку ввести мимо страницы с оплатой, будет доступно скачивание. В таком случае перемещать файл, который требуется скачать во временный каталог, генерировать ссылку и поддерживать её активной некоторое время, а потом очищать?

4. По поводу скачивания обычных файлов- хотелось бы закрыть ссылки таким образом, чтобы нельзя было мимо сайта вводить их в строку браузера и сразу начиналась закачка. Есть мысль о следующем алгоритме:
Список файлов.aspx с кнопкой скачать(download.aspx) ---> Передача, например, ID файла закрытым методом от пользователя, указывающего на запись в базе данных с файлом в страницу download.aspx с проверкой в ней редиректом на файл. Но каким образом тогда производить редирект так, чтобы ссылку опять же на этот редирект нельзя было достать в браузере пользователю?

P.S. Авторизации на сайте не будет.

Спасибо, надеюсь, не утомил.  Улыбаюсь
« Последнее редактирование: 15-10-2009 05:02 от Sel » Записан
abra
Постоялец

il
Offline Offline

« Ответ #1 : 14-10-2009 15:28 » 

на вопросы 1,2 и 3 может помочь запись в бд.
-Запись айпи (да, да, да я тоже знаю, что не панацея). Запись одного айпи хранится например неделю с последнего захода с него.
-по тому же айпишнику . Уплатил - в бд изменился флажок на тру.

как-то так думаю
Записан

Что для одного ошибка, для другого - исходные данные.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 14-10-2009 15:30 » 

IP у адсл-щиков лечится сбросом модема Улыбаюсь

по моему, нужно заставить пользователя оплатить некий выдаваемый гуид, затем по предоставлению этого "билета" и решать, пускать его на страницу или нет
« Последнее редактирование: 14-10-2009 15:32 от Алексей1153++ » Записан

FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 14-10-2009 18:05 » 

При всём уважении, вообще ни о чём, товарищи Жаль
« Последнее редактирование: 15-10-2009 04:59 от Sel » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 15-10-2009 03:13 » 

FallenSoul, ну лично я не вебдизайнер, я как обыватель рассуждаю Улыбаюсь
Записан

abra
Постоялец

il
Offline Offline

« Ответ #5 : 15-10-2009 10:28 » 

Алексей1153++
 Ломать не строить - любую защиту можно обойти Скромно так...
Записан

Что для одного ошибка, для другого - исходные данные.
FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 15-10-2009 19:34 » 

Всё ещё жду квалифицированной помощи/совета.
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #7 : 15-10-2009 20:34 » 

По первому пункту банально . Если с данного IP уже скачивают в данный момент, то не давать скачивать другие файлы одновременно.
 
Также сделать файлы закрытыми от доступа через инет. Написать специальный модуль. Который будет раздавать файлы. Когда будет выдаваться ссылка клиенту, она будет содержать уникальный ключ. Который будет включать в себя IP адрес и имя браузера клиента. Скажим эта строка будет зашифрована MD5 хешем. Этим ты исключиш раздачу ссылки другим пользователям. Когда будет вызвана ссылка. Модуль раздачи сначало смотрит в базе, есть ли такой ключ c данным IP. Если есть то начинает отдавать файл клиенту.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 16-10-2009 12:04 » 

По первому пункту банально . Если с данного IP уже скачивают в данный момент, то не давать скачивать другие файлы одновременно.

Это не очень хороший вариант, т.к. из-за задержек передачи и переходных процессов возникают моменты, когда формально подключение уже не используется, но сокет еще не закрыт. Я проходил это со сторонним модулем для Апача, чтобы ограничивать одновременные скачки. Кстати, возможно, что проблемы были из-за keepalive.

А вот с ключем - это правильнее. Если посмотреть на публичные файл-сервисы, то они так и поступают.
« Последнее редактирование: 16-10-2009 12:13 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 16-10-2009 12:11 » 

я так понимаю, что доступ через IIS.

RXL, если не сложно, а как достучаться к апачу через пхп на предмет наличия скачивания файла?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 16-10-2009 12:16 » 

Sla, никак. Весь сервис Апача для php вот: http://www.php.net/manual/en/ref.apache.php
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 16-10-2009 14:12 » 

http://www.simplecoding.org/ogranichevaem-dostup-k-faylam-na-servere.html
вот тут человек рассказывает как такое можно сделать с картинками
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #12 : 16-10-2009 15:15 » 

Хорошо, спасибо
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 17-10-2009 20:07 » new

Тема про ASP.NET, как я понимаю?

Встречные вопрос:

Как запрограммирован download файла? Если путём записи байтиков в Response, то почти всё решается элементарно - за счёт синхронизации.

1) Движок ASP.NET работает так, что 1 страница - 1 поток (thread) в контексте 1 сессии. Если download реализован отдельной aspx-страницей, то юзер физически не сможет запустить параллельный download для нескольких файлов. Попытки открытия новых окон браузера с адресом этой страницы ни к чему не приведут - все новые request будут ждать в очереди IIS окончания цикла обработки этой страницы, который будет висеть в стадии render и писать байтики в response. И только по окончании этого процесса будет обработан следующий request (если, конечно, не будет выброшен из очереди по таймауту, не дождавшись освобождения thread).

2) В сессии можно вести журнал закачек пользователя. Т.е. после каждого download записывать в этот журнал дату и время закачки. Далее перед каждой закачкой обрабатывать журнал. Во-первых, удалять из него слишком старые записи. Во-вторых считать количество не слишком старых записей, и проверять: если это количество превышает лимит, то вместо download выдавать надпись "Извини, друг, подожди лучших времён." или что-то в этом духе.

4) Хотя и нет авторизации, но уж такую штуку, как контроль посещения нужной страницы до выполнения download сделать элементарно - хоть через флажок в сессии. Если страница с download обнаруживает, что флажка в сессии нет, она делает redirect на нужную страницу, где юзер выполняет необходимые действия, после чего эта страница помещает в сессию флажок, и делает redirect на страницу download. Если страница с download находит флажок, то она нормально работает.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines