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.’
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
http://www.cherokee-project.com/doc/modules_handlers_secdownload.html