[PHP / .htaccess] Zabezpieczenie dostępu

0

Stanąłem przed takim oto problemem:
Mam pewien folder "abc", który będzie podlegał zabezpieczeniu. W tym folderze (i jego podfolderach) znajdują się pliki html, pliki graficzne i php. Poza tym folderem znajduje się plik, na przyklad logcheck.php sprawdzający czy użytkownik jest zalogowany. I teraz... chodzi o to by logcheck.php decydował o zezwoleniu dostępu do plików graficznych i html znajdujących się w "abc" (bo pliki php "obronią" się same).

Mój jedyny dotychczasowy pomysł to przekierowanie .htaccessem każdego wywołania pliku innego niż php na logcheck.php?plik=żądany_plik, który będzie przesyłał go w przypadku zezwolenia dostępu, lub wyświetlał stosowny komunikat w przypadku odmowy dostępu. Problem niestety w tym, że kompletnie nie znam się na htaccess.

0

Jeśli już jesteś przy takim rozwiązaniu to polecam mod_rewrite.

RewriteEngine On
RewriteRule abc/(.*) logcheck.php?plik=$1

Takie coś umieszczone w pliku .htaccess da nam to, że wszystkie adresy typu:
domena.pl/abc/omfg.jpg
Zostaną skierowane do:
domena.pl/logcheck.php?plik=omfg.jpg

A użytkownik nawet się nie skapnie. Tak samo będą tez kierowane pliki PHP, HTML czy wszystkie inne (PHP dlatego że nie jestem zwolennikiem pakowania w każdym pliku skryptu zabezpieczenia). Przy czym tak:

Jeśli plik jest zdjęciem to musimy naturalnie nadać mu typ MIME który oświadczy że to jest np.: image/jpg, dajemy jeszcze co tam chcemy (przykładowo pragma, expires etc.) i wysyłamy do użytkownika (readfile, fopen)
Jeśli plik jest kodem HTML to wysyłamy po prostu do usera.
Jeśli plik jest kodem PHP to wiadomo, wydobywamy to co jest w tagach <?php i ?> i traktujemy to funkcją eval().

0

A czy przekierowanie żądania, które zawierało dane POST, nie spowoduje ich utraty?

Co do rozwiązania to był tylko taki mój pomysł, bo nie wiem jakimi możliwościami dysponuje htaccess. Jak ma ktoś pomysł na inne to poproszę.

0

To nie jest rzeczywiste przekierowanie, tylko ukrywanie prawdziwego adresu pliku. Dla klienta jest to niewidoczne, dla skryptu php przezroczyste.

Demonikal Monk napisał(a)

Jeśli plik jest kodem PHP to wiadomo, wydobywamy to co jest w tagach <?php i ?> i traktujemy to funkcją eval().
Eval? Zwykłego require/include to już nie ma?

0

To nie jest przekierowanie tylko przepisanie :P Użytkownik dalej będzie miał na pasku adresu:
domena.pl/abc/costam
I nie spowoduje to utraty żadnych danych. No jeszcze możesz w .htaccess zrobić Autoryzacje HTTP (w google jest)

nav napisał(a)

To nie jest rzeczywiste przekierowanie, tylko ukrywanie prawdziwego adresu pliku. Dla klienta jest to niewidoczne, dla skryptu php przezroczyste.

Demonikal Monk napisał(a)

Jeśli plik jest kodem PHP to wiadomo, wydobywamy to co jest w tagach <?php i ?> i traktujemy to funkcją eval().
Eval? Zwykłego require/include to już nie ma?

Fakt, pomyłka... Za dużo Java Scriptu :D

0
RewriteRule abc/(.*) logcheck.php?plik=$1

Mogę tu używać wyrażeń regularnych, tak?

Ponadto dla pewności pytam: na pewno nie da się w żaden sposób ominąć takiego zabezpieczenia?

--EDIT--

RewriteEngine On

RewriteRule abc/(.+\..+) /logcheck.php?plik=$1

Tak wygląda ostatecznie mój .htaccess, wrzuciłem go w folder główny, w którym znajduje się "abc"
I owszem, działa ładnie, ale wyłącznie dla php i html - wszystkie inne pliki są wyświetlane tak jakby w ogóle nie było tego .htaccess . U kumpla, który ma własny serwer, nie ma tego problemu. Jakieś pomysły?

0

Regularnych można używać ofc, ale ja napisałem regułkę:

RewriteRule abc/(.*) logcheck.php?plik=$1

Gdzie (.*) to dowolna seria znaków. Więc nie może być tak ze nie wyłapuje ci obrazków oO (no chyba że coś z Apachem albo masz starego mod_rewrite)

0

Nie ma już problemu z nieprzekierowywaniem czegoś (admin naprawił), ale za to natrafiłem na inny problem...

Martwiłem się niepotrzebnie POSTem, a okazuje się, że przy rewrite gubią się wartości GET.

0

No bo przepisujesz do pliku PHP ^^

0

Znalazłem rozwiązanie mojego problemu:

RewriteCond %{QUERY_STRING} \?(.*)
RewriteRule abc/(.+\.php) /logcheck.php?plik=$1&%1

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0