Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zabezpieczenie formularza
Forum PHP.pl > Forum > PHP
mihow
Witam!
Mam zwykły formularz logowania wysyłany POST'em na zwykłym HTTP.
REGISTER_GLOBALS jest wyłączone. Jak zabezpieczyć taki formularz, aby nikt nie mógł go obejść?
Dodam, że po poprawnym zalogowaniu tworzone są sesje, które identyfikują zalogowanego użytkownika w systemie.

Pzdr
Michał
kszychu
Podczas odbierania danych z formularza możesz sprawdzać referrera, skąd przyszedł formularz, i jeżeli nie od Ciebie, to go odrzucasz.
Roly
Nie chcialem tworzyc nowego tematu bo dotyczy on wlasnie zabezpieczenia formularza i mam pytanko potrzebuje skrypcik htory sprawdzi refferera pod wzgeldem tego czy pochodzi z http://*.mojadomena.pl
goldmann
  1. <?php
  2. if (strstr($_SERVER[&#092;"HTTP_REFERER\"], \"mojadomena.pl\") == NULL) {
  3. echo(&#092;"Przejdź do formularza ze strony http://mojadomena.pl/\");
  4. } else {
  5. // wszystko OK
  6. }
  7. ?>

Pozdrawiam!
dr_bonzo
  1. <?php strstr($_SERVER[&#092;"HTTP_REFERER\"], \"mojadomena.pl\") ...?>

ale funkcja ta zwraca pozycje pierwszego wystapienia "mojadomena.pl" w refererze => strstr() zwroci wartsoc !== FALSE jesli znajdzie "mojadomena.pl" w refererze (zaakceptuje referera).
Zaakceptuje:
http://costam.mojadomena.pl/....
a takze
http://evilh4xors.com/hackhim.php?site=BLA...domena.plBLABLA
lub
http://evilh4xors.com/mojadomena.pl.html

A poza tym referera wysyla przegladarka -- czyli user, ktory moze ta wartosc dowolnie zmienic (np. jakis extension do ffoxa).
goldmann
@dr_bonzo: no tak

No to zrób tak: jeżeli Twoja strona używa sesji, to w przypadku, gdy user jest na stronie formularza - ustaw jakąs zmienna sesyjną, np. $_SESSION['ze_strony'] na true. Następnie, w pliku obsługi formularza trzeba sprawdzać, czy $_SESSION['ze_strony'] jest ustawione, wtedy wszystko OK, jeżeli nie, to alert.
scanner
W formularzy dodaj pole hidden, w które wpiszesz ID sesji. Po wysłaniu tego formularza sprawdzasz ten numer sesji z ID uzyskanym na poziomie php.
yeti
BTW referera (od razu mówię, że nie sprawdziłem, bo nie miałem jak, ale właśnie mi wpadło w oko a tyczy tematu):

Cytat
How to Spoof HTTP_Referer
(or any other browser passed variable)

To see an ELEMENTARY way to spoof any referer (sic) value, you'll need telnet and a way to see the referer value that your server records (server logs always have the referer value in them).

Try the following:
(The example below assumes your homepage is index.html)

telnet www.yoursite.com 80 (press return)
GET /index.html HTTP/1.0 (press return)
Referer: http://www.hah-hah.com (press return)
(press return again)

Now, check your server logs and you'll see that "someone" from hah-hah.com grabbed your homepage.

If you are trying to "protect" a file by making sure that the referer value (or any other browser passed variable) is your own website, you can be bypassed by this simple technique. You cannot trust any browser passed variables.


no i tak to ponoc wygląda. Jak się dorwę wieczorem do serwera to przestestuję to sobie.


i jeszcze cytat z manuala:
Cytat
'HTTP_REFERER'
    The address of the page (if any) which referred the user agent to the current page. This is set by the user agent. Not all user agents will set this, and some provide the ability to modify HTTP_REFERER as a feature. In short, it cannot really be trusted.
Roly
zrobilem to tak:

  1. <?php
  2.  
  3. preg_match('/^http://(www.)?([w]+)?.?([w]+)?.?domena.pl/', $ref)
  4.  
  5. ?>


temu tak bo moj system nie ma wiekszego poziomu domen niz dwie czyli cos.cos2.domena.pl albo www.cos.cos2.domena.pl
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.