Autor Zpráva
HomerJay
Profil
Zdravím. Potreboval by som poradiť ako zabrániť hotlinkingu / directlinkingu. Jednoducho aby na downloady na stránke nebolo možné zájsť z inej stránky, ... asi tak... :D Vďaka.
Nox
Profil
Taky zdravím, mrkni se sem:
http://www.askapache.com/htaccess/apache-htaccess.html
imploder
Profil
HomerJay
návod, jak něčeho takového dosáhnout:
1. Umísti soubory, které chceš mít takto chráněné, mimo www root nebo (ono to asi nepůjde pokud server není tvůj) zabraň přístupu k nim souborem ".htaccess". Na to stačí do složky, která má být znepřístupněna, dát soubor s názvem .htaccess obsahující
Deny from all
(je nutné mít na serveru .htaccess povolen, aby to fungovalo)
2. Na přístup k daným souborům vytvoř skript, přes který se budou stahovat (nebudeš tedy odkazovat přímo na soubor, ale na ten skript s parametrem, který soubor má vzít - např. "http://www.mujweb.cz/stahni.php?soubor=chranenysoubor.zip". Ten skript bude kontrolovat HTTP hlavičku referer příchozího požadavku; když nebude obsahovat tvoji doménu, tak skript odmítne soubor vydat. Když bude referer v pořádku, vezme soubor z té chráněné složky a vypíše ho na výstup. Jednoduše to jde udělat např. v PHP. Ještě před vypsáním samotného souboru by měl skript vypsat HTTP hlavičky s informacemi o souboru, zejména velikost a typ (content-type) - tohle normálně dělá HTTP server, ale tady to budeš muset udělat ty v tom skriptu.

Můžeš si to naprogramovat nebo se porozhlídnout po nějakém hotovém skriptu (nejspíš se nějaký najde). Celé to má jen jeden háček: prohlížeč může mít vypnuté posílání refereru a v takovém případě by se uživatel k souboru nedostal ani z tvojeho webu.
Možné řešení: místo refereru kontrolovat nějaký klíč, který každá zobrazená stránka s downloady na tvojem webu dostane náhodně vygenerovaný a ten klíč se pak vloží jako parametr do odkazů na ní; skript bude kontrolovat jeho platnost.
Možné úskalí toho řešení: klíč nesmí být platný věčně, jinak by hotlinkeři prostě zkopírovali odkaz i s klíčem na svoje stránky a ochcali by to tak.
Možné jiné řešení: akceptovat i požadavky bez refereru a odmítat jenom ty s refererem obsahujícím jinou doménu; a nemít tak dokonalou ochranu proti hotlinkování - kdo má v prohlížeči vypnuté posílání refereru, dostane se k souboru i z jiného webu; případné hotlinkery to ale spolehlivě odradí, protože většina uživatelů má v prohlížeči posílání refereru zapnuté.

Takže asi tak, úplně dokonalé řešení neexistuje. Nejlepší bude vyžadovat, aby referer obsahoval tvoji doménu nebo nebyl žádný.

EDIT: to s tím skriptem je zbytečnost, jde to zařídit přímo v HTTP serveru Apache pomocí rewrite rule v souboru .htaccess, takže žádný skript není potřeba
HomerJay
Profil
Nox - ešte som sa tam nepozeral, odpovedám narýchlo, tak vďaka, určite sa tam pozriem, snáď to pôjde :)

imploder -
1.- Jn, to som už urobil, to mám kvôli robotom :D.
2.- To ma tiež napadlo, len som nevedel ako to bude presne fungovať, nie som nejaký extra php kóder :D Ale vďaka, niečo podobné si snáď nájdem.
imploder
Profil
HomerJay
Pár odkazů na PHP funkce:
http://cz2.php.net/manual/en/function.header.php - na vypisování HTTP hlaviček
http://cz2.php.net/manual/en/function.filesize.php - na zjištění velikosti souboru (patří do hlavičky Content-Length)
http://cz2.php.net/manual/en/function.mime-content-type.php - na zjištění typu souboru (patří do hlavičky Content-Type)
http://cz2.php.net/manual/en/function.file-put-contents.php - na vypsání obsahu souboru

Lepší bude ale nastudovat, co poslal Nox, jde to zřejmě zařídit jednodušeji přímo v souboru .htaccess, tj. na úrovni serveru.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: