Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Bezpieczny system logowania
Forum PHP.pl > Forum > Przedszkole
Ikky
hej

o czym musze pamietac chcac napisac bardzo bezpieczny system logowania oparty o mysql ?
na razie przychodzi mi do głowy:

- md5 hasła
- ograniczenie do 5 prób na godzine
Fifi209
Zacznijmy od tego:
zamiast md5 -> sha1

Nie wstawiaj zmiennych z formularzy do zapytań w żadnym wypadku! (bez wcześniejszej obróbki)
Określ, czego spodziewasz się np. ustalasz login to tylko literki a-zA-Z0-9 od 1 do 20 znaków i budujesz takie wyrażenie regularne.
Używasz mysql_real_escape_string

Najlepiej pisanie systemu logowania zacznij od napisania session handlera.
kfc4
Jak będziesz robił automatyczne logowanie to zapisujesz cookie httponly z jakimś haszem np. login + id + jakaś sól. Dalej zapisujesz ten hash do bazy + nazwa przeglądarki + system i porównujesz wszystko.
r4xz
Cytat(kfc4 @ 10.08.2009, 20:28:48 ) *
Jak będziesz robił automatyczne logowanie to zapisujesz cookie httponly z jakimś haszem np. login + id + jakaś sól. Dalej zapisujesz ten hash do bazy + nazwa przeglądarki + system i porównujesz wszystko.


nawiązując do tematu i cytatu:


ta "(...)jakaś sól(...)" jest całkowicie zbędna. wystarczy zwykłe zapisanie hasła w md5 lub tego typu podobnym. po co zmyślać tam jakieś dziwadła, jeśli równie dobrze dana osoba może wejść na stronę, skorzystać z automatycznego logowania i tak wykraść dane? dlatego jest wybór automatycznego logowania, aby w miejscach publicznych tego unikać. nie bez powodu mówi się komputer osobisty/prywatny. (takie moje skromne zdanie smile.gif

Ikky
dzieki za pomoc to biore sie wlasnie za czytanie tongue.gif

a i heh napisałem w zendzie ( bo na tym frameworku bede tworzyl logowanie)
zrobilem prostą sesje która dodaje ++ przy kazdym wysłaniu formularza
i dałem 10 mozliwosci na godzine potem odpalilem inna przegladarke klapa tongue.gif
a potem po wpisaniu 10 niepoprawnych loginow dalem w firefoxie usun sesje i moglem znowu wpisywac:P
Fifi209
Cytat(Ikky @ 10.08.2009, 20:06:18 ) *
a potem po wpisaniu 10 niepoprawnych loginow dalem w firefoxie usun sesje i moglem znowu wpisywac:P


Bo te dane o nieudanych logowaniach masz trzymać w bazie i "wiązać" po user_id
Ikky
a moze w ogole sobie odpuscic sesje?
i zrobic cos takiego:

po wpisaniu do formularza danych/ walidacji:

sprawdza czy istnieje user o wpisanym w formularzu loginie jesli tak i haslo jest poprawne to idziemy dalej
a jesli nie istnieje to logowanie jeszce raz
a jesli istnieje ale haslo jest niepoprawne to do kolumny powiedzmy user_login_counter dodaje sie 1

i wczesniej po sprawdzaniu czy user istnieje if jesli user_login_counter > 10 to die

i cos tam jeszce zrobie zeby sie co godzine to zerowało
Fifi209
Jeżeli chcesz odpuścić sesje to nie wróżę nic dobrego - same kłopoty. Poczytaj do czego jest sesja.
Ikky
tzn moze sie zle wyrazilem chce zrezygnowac z sesji tylko i wylacznie przy sprawdzaniu ile razy ktos juz sie probowal zalogowac
Fifi209
Cytat(Ikky @ 10.08.2009, 21:36:55 ) *
tzn moze sie zle wyrazilem chce zrezygnowac z sesji tylko i wylacznie przy sprawdzaniu ile razy ktos juz sie probowal zalogowac


Czemu? Przypisz użytkownika do sesji i tyle. ;d

Jeżeli sesja danego użytkownika istnieje to działasz dalej, jeżeli wygasła to usuwasz z bazy i tworzysz nową.
jmail
Ikky możesz zrezygnować z sesji jak Ci się chce, ale po to jest, żeby jej używać.

Generalnie nie zapomnij o zastąpieniu apostrofów podwójnymi przed wsadzeniem do zapytania bo bez tego masz sql injection jak w banku
Fifi209
Cytat(jmail @ 10.08.2009, 23:20:34 ) *
Ikky możesz zrezygnować z sesji jak Ci się chce, ale po to jest, żeby jej używać.

Jak wyobrażasz sobie dalsze akcje wykonywane po zalogowaniu?

Cytat(jmail @ 10.08.2009, 23:20:34 ) *
Generalnie nie zapomnij o zastąpieniu apostrofów podwójnymi przed wsadzeniem do zapytania bo bez tego masz sql injection jak w banku

Generalnie czy będzie apostrof czy cudzysłów i tak można zamknąć poprzez sqli więc nie gadaj głupot.
jmail
Wyobrażam sobie działanie w oparciu o własne ClientScope.

A możesz mnie oświecić gdzie głupotę gadam?
gcdreak
Dodatkowo przy rejstracji wproować wysyłanie maila z linkiem i ewentualnie captcha.
Ikky
Cytat(gcdreak @ 11.08.2009, 07:51:07 ) *
Dodatkowo przy rejstracji wproować wysyłanie maila z linkiem i ewentualnie captcha.


rejestracji nie będzie
klient będzie w airze więc aplikacja dekstopowa którą jakoś też trzeba zdobyc tongue.gif
Fifi209
Cytat(jmail @ 10.08.2009, 23:54:10 ) *
A możesz mnie oświecić gdzie głupotę gadam?


Napisałem, czy apostrof czy cudzysłów i tak w trakcie ataku można go domknąć, że tak się wyrażę. Więc zmiana an cudzysłowy mu nic nie da bez użycia funkcji np. mysql_real_escape_string ja bym do tego regi dorzucił.
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.