[PHP / .htaccess] Zabezpieczenie dostępu

Odpowiedz Nowy wątek
2009-09-10 14:26
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.

Pozostało 580 znaków

2009-09-10 15:10
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().


Women were the reason I became a monk - and, ah, the reason I switched back...

Pozostało 580 znaków

2009-09-10 16:12
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ę.

Pozostało 580 znaków

2009-09-10 17:29
nav
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?


utf-8 rlz! ٩(ಥ_ಥ)۶

Pozostało 580 znaków

2009-09-10 17:30
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


Women were the reason I became a monk - and, ah, the reason I switched back...

Pozostało 580 znaków

2009-09-11 00:19
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?

Pozostało 580 znaków

2009-09-11 13:50
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)


Women were the reason I became a monk - and, ah, the reason I switched back...

Pozostało 580 znaków

2009-09-14 16:48
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.

Pozostało 580 znaków

2009-09-14 18:44
0

No bo przepisujesz do pliku PHP ^^


Women were the reason I became a monk - and, ah, the reason I switched back...

Pozostało 580 znaków

2009-09-14 19:32
0

Znalazłem rozwiązanie mojego problemu:

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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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