![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 278 Pomógł: 35 Dołączył: 25.06.2010 Ostrzeżenie: (0%) ![]() ![]() |
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 (IMG:style_emoticons/default/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? Ten post edytował gargamel 3.11.2010, 13:39:41 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 142 Pomógł: 24 Dołączył: 30.03.2009 Skąd: Rokitno Szlacheckie Ostrzeżenie: (0%) ![]() ![]() |
http_referer jest wysyłany przez przeglądarkę... przy użycie httpLiveHeaders (dodatek do FF) można bez problemu zmienić wartość tej zmiennej
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
nie polegaj na tej zmiennej, lepiej ustaw sobie zmienną w sesji
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
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. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 278 Pomógł: 35 Dołączył: 25.06.2010 Ostrzeżenie: (0%) ![]() ![]() |
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... |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
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). |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 03:58 |