Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> logi w systemie logowania
mis
post
Post #1





Grupa: Zarejestrowani
Postów: 71
Pomógł: 2
Dołączył: 25.04.2010

Ostrzeżenie: (0%)
-----


Hej,
stworzyłem systemik logowania, teraz chce dodać kolejne zabezpieczenie jakim jest ilość prób logowania.
Wydaje mi się, że najlepszym wyjściem jest stworzenie nowej tabeli, gdzie będzie zapis ost. logowanie,id,ip,user agent itp
i sprawdzać stąd ostatnie logowania. potem można zrobić zakładkę 'historia logowań'.

Potem np. wpisy starcze niż 30dni kasować.
Gdy ilość wpisów(gdzie np. kolumna status = 1 - czyli błędne logowania) będzie np. >= 5 i czas nie większy niż np. 1h wtedy blokuje konto na 20min.

Niestety każdy będzie mógł zablokować innej osobie konto, ale na to chyba nie da rady nic poradzić?


Jak myślicie?
Jak takie coś najlepiej rozwiązac
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
tehaha
post
Post #2





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

Ostrzeżenie: (0%)
-----


No ale powiedz mi po co blokować dostęp użytkownikowi? Chcesz go odstraszyć czy uważasz to za jakieś zabezpieczenie? Przecież nie ma nic złego w tym, że użytkownik podejmie 7 czy 10 prób logowania, to przed czym powinieneś się zabezpieczyć, to żeby ktoś nie napisał automatu, który będzie próbował złamać hasło, dlatego skutecznie zrobisz to, jeżeli po kilku błędnych próbach pojawi się dodatkowo captcha do przepisania, automat wtedy już nie przejdzie. Dodatkowo przy rejestracji podczas walidacji danych powinieneś wymagać od użytkownika, żeby hasło miało przynajmniej te 6 znaków i najlepiej, żeby zawierało cyfrę i nie było identyczne z loginem, czy adresem e-mail. Blokowanie czasowe IP robi się jako zabezpieczenie przed flood'em, ale to już inna kwestia.

a co do tabeli to jak tam sobie chcesz możesz zrobić jakąś prostą tabelę typu:
login_attemtps:
id (INT)
ip (VARCHAR)
date (TIMESTAMP)

i przy logowaniu zapytaniem zliczasz ilość prób dla danego IP w ostatnich 5 minutach
SELECT COUNT(id) AS count FROM login_attempts WHERE ip = $ip AND date > DATE_SUB(NOW(), INTERVAL 5 MIN)

lub nawet prościej, możesz każdą próbę wrzucać do sesji

oczywiście pamiętaj o zabezpieczeniu zapytania przed sql injection, używaj funkcji mysql_real_escape_string(), a najlepiej PDO prepared statements

Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 27.12.2025 - 16:03