Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zabezpieczenie pliku przed odczytem przez url
Forum PHP.pl > Forum > Serwery WWW
matjab
Witam.
Zdaję sobie sprawę, że podobne tematy pojawiły się już na forum,
choćby tu:
http://forum.php.pl/index.php?showtopic=10...&pid=541315
albo tu:
http://forum.php.pl/index.php?showtopic=93...rt=#entry471123
Ale prawdę mówiąc niewiele z tego rozumiem, a nie wierzę, żeby było to aż tak skomplikowane.
Otóż sprawa przedstawia się w następujący sposób:
Chciałbym zabezpieczyć plik graficzny, aby nie można go było wyświetlić po wpisaniu urla do niego, jednocześnie oczywiście chciałbym mieć do niego dostęp z poziomu skryptu.
I to właściwie tyle. Próbowałem już wpisu do .htaccess typu: Deny from All, ale to (choć rozwiązuje sprawę urla) uniemożliwia mi wyświetlanie tej grafiki w szablonach.
Any Ideas? Please biggrin.gif
magra
jeśli masz włączone mod_rewrite (a pewnie masz), możesz spróbować sprawdzać referer'a w .htaccess

CODE

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?twojadomena\.pl/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /img/wal_sie_zlamasie.jpg [L]

matjab
czyli sprawdzać, czy rządanie ściągnięcia pliku pochodzi z mojego skryptu? A dokładnie strony, z której ten skryp wywołuje..
Bo dokładnie to plik ten ma być wyświetlany w pdf-ie, więc mogę w ten sposób sprawdzić, czy rządanie pochodzi ze strony na której np. klikam na button generuj pdf (który wywołuje skrypt korzystający z obrazka)..

Próbuje i niestety nie działa tak jak powinno.
wykasowałem linie:
RewriteCond %{HTTP_REFERER} !^$
ponieważ dotyczy ona pustego adresu ( a taki też chcę zablokować)
i zamiast ostatniej linii dałem:
RewriteRule .*\.(jpe?g|gif|bmp|png)$ - [F]
aby wymusić wyświelenie strony błędu 403
Być może źle podaje ścieżkę w drugiej linijce:
jak rozumiem powinna zostać zapisana w taki sposób:
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?domena\.pl/nazwa_katalogu_na_serwerze/nazwa_pliku\.php [NC]
adres wygląda tak, ponieważ chcę umożliwić dostęp tylko z niego
co robie nie tak? sciana.gif

Ok działa!
Zamieszczam działający kod .htaccess:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?domena\.pl [NC]
RewriteRule .*\.(jpe?g|gif|bmp|png)$ - [F]

Skrypt umożliwi dostęp tylko z adresu domena.pl, w każdym innym przypadku (łącznie z pustym adresem HTTP_REFERER) wyświetli się błąd serwera 403 (dostęp zabroniony)

użytkownikowi magra dziękuje - to był dobry trop biggrin.gif
erix
Cytat
czyli sprawdzać, czy rządanie

Polska język trudna język?

Cytat
Chciałbym zabezpieczyć plik graficzny, aby nie można go było wyświetlić po wpisaniu urla do niego, jednocześnie oczywiście chciałbym mieć do niego dostęp z poziomu skryptu.

Życzę powodzenia, zostaje wyłącznie próba przez dopisanie parametru do URL. Ale użyszkodnik i tak zapisze, czy tego chcesz, czy nie.
webby
Cytat(erix @ 21.08.2009, 11:30:29 ) *
Polska język trudna język?


Życzę powodzenia, zostaje wyłącznie próba przez dopisanie parametru do URL. Ale użyszkodnik i tak zapisze, czy tego chcesz, czy nie.


Osobiście, zablokowałbym dostęp z zewnątrz przez htaccess'a, a potem używał php do sprawdzenia czy mamy prawa dostępu do danego pliku i jeśli tak to wyrzucenia odpowiedniego headera dla pliku i zaladowania calego pliku... np:
htaccess:
Order Allow,Deny
Deny from All
i php:
  1. Header("Content-disposition: attachment; filename=\"".$_GET["plik"]."\"");
  2. readfile("download_files/".$_GET["plik"]);
erix
  1. niepotrzebnie tak obciążasz PHP
  2. uniemożliwiasz cache'owanie
  3. użytkownik zapisze i tak biggrin.gif
bełdzio
Cytat(matjab @ 21.08.2009, 09:23:17 ) *
Any Ideas? Please biggrin.gif

http://www.beldzio.com/bezpieczenstwo-dostepu-do-plikow

Cytat(magra @ 21.08.2009, 09:46:59 ) *
możesz spróbować sprawdzać referer

1. bardzo łatwo go można spreparować
2. niktóre firewalle wycinają referera z żądań
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.