Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak to w końcu jest z tym http_refererem
Forum PHP.pl > Forum > PHP
gargamel
Przekopałem trochę forum, ale nie znalazłem tego czego dokładnie szukałem...
Takie tylko linki...
http://forum.php.pl/index.php?showtopic=35422
http://forum.php.pl/index.php?showtopic=18535

Chodzi mi o to na ile można ufać zmiennej $_SERVER['HTTP_REFERER'].
Wykorzystuję ową zmienną, aby zabezpieczyć formularz logowania. Logowanie odbywa się dopiero gdy login i hasło zostało przesłane z określonej strony.
Tylko wszędzie czytam że http_referer nie jest godzien zaufania dry.gif
Jak to jest? Czy można jakoś (i w jaki sposób ) zmienić jego wartość i podszyć się pod stronę z której się logujemy?
hind
http_referer jest wysyłany przez przeglądarkę... przy użycie httpLiveHeaders (dodatek do FF) można bez problemu zmienić wartość tej zmiennej
tehaha
nie polegaj na tej zmiennej, lepiej ustaw sobie zmienną w sesji
Crozin
Nagłówek REFERRER jest wysyłany przez klienta i może w nim być dosłownie wszystko.

Ochronę przed CRSF robi się nieco inaczej. Na stronie z formularzem generujesz unikalny token, zapisujesz go jako zmienną sesyjną, a do formularza dodajesz ukryte pole z tym tokenem. Na stronie odbierającej formularz sprawdzasz czy przesłany token jest taki sam jak ten z sesji.
gargamel
No ok.
Tylko hmm... wyprowadźcie mnie z błędu, bo pewnie czegoś do końca nie łapie.
Mam powiedzmy 2 pliki:
index.php - z formularzem,
logowanie.php - skrypt sprawdzający przesłane dane i zapisujący do sesji to co trzeba.

Plik index.php tworzy token i zapisuje do w sesji. Ponadto ten sam token ląduje w ukrytym polu formularza.
Login hasło i token lecą do logowanie.php i tam jeśli przesłany token zgadza się z tym z sesji, następuje dalsza procedura logowania.
Tak to widzę, ale pewnie źle, bo:
Ktoś otwiera sobie index.php, zagląda w źródło i w ukrytym polu ma token jak na dłoni. W sesji jest on już ustawiony, więc można go wysłać razem z loginem i hasłem do logowanie.php skąd tylko chcemy...
Crozin
Tak, jeżeli to Ty bezpośrednio wchodzisz na tę stronę (w tym momencie serwer generuje unikalny token *dla Ciebie*), kopiujesz sobie ów token i wysyłasz dane. Serwer nie ma technicznej możliwości sprawdzenia czy otrzymane żądanie zostało wygenerowane formularzem.

Ten token ma uniemożliwić ataki typu CRSF czyli coś na zasadzie: na mojej - złej - stronie wstawiam sobie formularz z action ustawionym na Twoją stronę. Klikając robisz nieświadomie jakąś czynność w innym serwisie (np. usuwasz swoje konto/zdjęcia, zakładasz durny wątek na forum).
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.