ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: HttpAccessKeyModule или HttpSecureLinkModule



Не понял в данном случае, зачем надо что-то передавать в ссылку после file.zip. Ссылка для всех одна, а проверка уже идет из того, есть ли кука соответствующая.
Например, выставляем при авторизации куку is_authorized в 1. И проверяем:
if($http_cookie ~* '^(.*)is_authorized=1(.*)$')
....тогда отдаем нормально
Иначе - 404.

>>А что-то посложнее можно придумать?
Посложнее в реализации? Зачем? :))

А вы случайно не файлообменник делаете? Ну т.е. обычный обмен файлами с ограниченным доступом (чтобы скачивали не все, а только определенные люди)?
Если так, то проще сделать следующим образом (объясню саму идею, без конкретной реализации). У вас есть кнопка, на которую человек может нажать, чтобы получить право пользоваться файлом. Запускается скрипт, который решает, можно ли ему этот файл получить или нет (например, заплатил ли он за него или достаточно ли других прав - чистая бизнес-логика). Этот скрипт, если человеку можно файл отдать, создает проверочный файлик вида <ip_человека-сгенерированный_хэш>.
А в location, который эти файлы отдает, ставите проверку (примерно такую):

set $fileName '';
set $secretKey '';
if ($request_uri ~* ^/path_to_files/([0-9a-z]+)/(.+)$) {
        set $fileName $2;
        set $secretKey $1;
}
set $rightKey 0;
if (-f /path_to_download_keys/download_key/$remote_addr-$secretKey) {
      set $rightKey 1;
      rewrite ^(.*)$ /path_to_files/$fileName break;
}
if ( $rightKey != 1) {
      return 404;
}

Клиенту отдаете ссылку /path_to_files/<$secretKey>/<filename>. Здесь $secretKey - это сгенерированный хэш из имени проверочного файлика.

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



4 июля 2013 г., 11:41 пользователь shurik_saint <nginx-forum@xxxxxxxx> написал:
Т. е.
для accesskey_signature выставляем что-то вроде "$cookie_issignedin",
для всех залогиненых ставим куку issignedin, например, в "yes",
и раздаём ссылки вида
http://example.com/download/file.zip?key=09093abeac094, где "09093abeac094"
-- это заранее известный хэш куки issignedin.
Правильно я понял?

А что-то посложнее можно придумать?

Posted at Nginx Forum: http://forum.nginx.org/read.php?21,240549,240574#msg-240574

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.