Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
PHP
Evidovaný download
php
30. září 2002, 00.00 | Nejednoho tvůrce zajímá kdo a kdy, je stahuje jeho soubory. Tento článek věnuji tématu, jak sledovat download souborů. Navíc
jakým způsobem povolit či zamítnout download souborů nechtěným uživatelům.
Asi každý má na svých stránkách nějaké soubory ke stažení. Často se jedná o soubory vlastní tvorby a určitě nejednoho tvůrce by zajímalo kdo a kdy, je stahuje. Tento článek věnuji právě tomuto tématu. Navíc ozřejmím, jakým způsobem lze soubory schovat, aby je bylo možné downloadovat pouze přes Váš skript, který např. může od dat uříznout všechny neregistrované uživatele apod.
Téma první ochrana datSkript pro download souborů je sice dobrá věc, ale když budete neopatrní, může se stát obrovskou dírou pro hackery. Už při tvorbě databáze je nutné to vzít vpodaz. Příklad: skript, který downloaduje vaše soubory, může stejně dobře stahovat PHP či konfigurační soubory přímo z vašeho serveru a to v původní podobě.
Můj návrh spočívá asi v nejbezpečnější variantě, kterou je, že všechny soubory, které lze downloadovat jsou uloženy v databázi (jen jejich adresy). Mimo každý soubor má svůj label, který se může absolutně lišit od pravého jména souboru.
|
Další částí do databáze bude tabulka downloads, což bude prostý log. Do něj budeme zapisovat podrobnosti o downloadu jako čas, downloadovaný soubor, ip adresu a url toho, kdo ho požaduje a samozřejmě od koho k nám přišel např. http://www.download.com/.
|
Téma druhé vlastní skript
První co je nutné říci je, že skript bude umístěný v souboru download.php a požadovaný soubor tj. label se mu bude předávat přes parameter file. V případě, že bude parameter file obsahovat chybný label (neobsažený v databázi) či ho nebude obsahovat vůbec, provede se prosté přesměrování na index celého webu.
|
V první fázi můžete krásně vidět připojení k databázi s následným ověřením, zda existuje label a případnému přesměrování na index webu (definovaný jako $web_url).
|
Možná jste si všimli, že IP adresa je VARCHAR(136) a nevěděli proč. Je to jednoduché. Zaprvné je to navrženo pro IPv6. Za druhé snažím se rozlišovat, pokud je to možné, proxy servery od skutečného uživatele. Takže ve finále zde může být několik podobných IP adres, které se postupně konkretizují.
|
Zapsání do databáze. Co dodat? A teď to hlavní.
|
První způsob downloadu souboru spočívá v bezpečnější cestě. Protože uživatel, ani kdyby se zabýval HTTP hlavičkami, nezjistí cestu souboru či jaké jeho pravé jméno. Ale musí vzít v potaz, že se celý soubor musí odesílat přes PHP na výstup, což by u velkých souborů mohlo vést k tomu, že se překročí standardní doba 30 sekund pro běh skriptu. Proto ihned nastavuji nový limit na 600 sekund. Potlačil jsem i vypsání chybové hlášky, kdyby nebyl nazelezen soubor, aby se neprozradila jeho pravá cesta.
|
Cesta druhá aneb klasické přesměrování na fyzický soubor.
|
A skript končí poslední variantou. A to, že nebyl zadán parameter file. Opět se provede přesměrování na index webu.
To je ode mně vše. Zdrojové kódy, včetně SQL. Budete si muset opravit soubor db_conn.php a proměnou $web_url v souboru download.php.
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007