Index : Dokumentacja Cherokee : Handlery
Hidden Downloads

Handler ten jest implementacją mechanizmu bezpiecznych pobierań. Umożliwia on obsługę tymczasowych adresów celem wysłania “ukrytego” pliku.

Parametry

Parametry Typ Opis
secret string Pozwala na wymianę hasła pomiędzy handlerem a skryptem. Wymagany
timeout number Jak długo dany URL będzie ważny

Opis techniczny

Zasada kierująca tym handlerem jest bardzo prosta. Pozwoli na pobranie pliku tylko wtedy kiedy URL został wygenerowany przez skrypt dynamiczny, który wcześniej napisałeś.
Całość opiera się na specjalnie zakodowanym adresie który zostaje potem obsłużony przez Cherokee

Jeśli dany adres jest niepoprawny, zmodyfikowany albo wygasły, Cherokee nie pozwoli pobrać pliku.

Schemat kodowania jest prosty. Bazuje hashu MD5 współdzielonego hasła między Cherokee a skryptem, względną scieżką do pliku oraz na bierzącym czasie.

'/' HEX (MD5 (SECRET + URL + HEX(time))) '/' HEX(time) '/' URL

To jest przykład implementacji w Pythonie:


def secure_download (prefix, url, secret):
    import time, hashlib
    t = '%08x' % (time.time())
    return "/%s/%s/%s" % (hashlib.md5(secret + url + t).hexdigest(), t, url)

Ta sama funkcja w PHP:


 function secure_download ($prefix, $url, $secret) {
  $time = sprintf('%08x', time());
  return "$prefix/".md5($secret.$url.$time)."/$time$url";
}

Ważne jest aby pamiętać o tym, że te adresy będą ważne tylko pewien okres czasu. Jeśli dany adres wygaśnie, serwer zwróci błąd zamiast pliku. Domyślnie czas ten wynosi 60 sekund.

Przykłady

Wyobraźmy sobie że mamy kilka plików ISO króre chcemy udostępnić określonej grupie osób.

Po pierwsze i najważniejsze, pliki ISO muszą znajdować się w miejscu niedostępnym dla serwera.
W naszym przykładzie pliki te będziemy mieli w /mnt/isos/, i główną ścieżką serwera ( server document root ) jest /var/www/.

Teraz czas na ustawienie katalogu www /downloads, oczywiście będzie on obsługiwany przez Hidden Downloads.
Naszym sekretnym hasłem będzie Abracadabra, document root ustawiony na miejsce gdzie znajdują się nasze pliki czyli /mnt/isos:

Następnym krokiem jest napisanie skryptu decyzyjnego, na przykład:


SECRET = “Abracadabra” PREFIX = “/downloads”

def secure_download (url): import time, hashlib t = '%08x’ % (time.time()) return PREFIX + “/%s/%s/%s” % (hashlib.md5(SECRET + url + t).hexdigest(), t, url) if logged: print 'Download' % (secure_download (url)) else: print 'Sorry, you have to log in first.’
http://www.cherokee-project.com/doc/modules_handlers_secdownload.html
Szczegóły tej rewizji
Rewizje tego pliku
Rewizje w tej gałęzi
Data modyfikacji: 25-03-2009, 02:55:14
Autor: Jędrzej Nowak <me@pigmej.eu>
Typ formatowania: textile