Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Bezpieczny system logowania
Displace
post
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 24.07.2010

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


Witam,

Próbuję od jakiegoś czasu napisać skrypt logowania, ale tak, aby był jak najbardziej bezpieczny. Jakiekolwiek włamanie na konto użytkownika jest w moim przypadku niedopuszczalne. W internecie dużo jest "poradników" czy też "kursów" na ten temat. A pisząc poradniki, jeszcze w cudzysłowu mam na myśli to, że w 95% przypadków jest to zwykły system oparty na sesjach, bez jakichkolwiek zabezpieczeń. W większości przypadków nie jest to też to, czego szukam.

Docelowo muszę napisać system logowania z możliwością zapamiętania użytkownika na danym komputerze - jedynym słusznym rozwiązaniem jest użycie sesji i cookies.

I teraz jak to ugryźć?
1) Czy wystarczy samo session_regenerate_id(), czy coś jeszcze można by było dorzucić do kodu?
2) Czy warto stworzyć osobną tabelę w bazie danych specjalnie dla sesji? Jeśli tak, to na jakiej zasadzie by to działało i jakie pola powinny się w niej znaleźć? Dla przykładu, oto tabele z phpBB3, niestety nie wiem w jaki sposób rozwiązano tam ten problem, gdyż cały kod tegoż forum jest za długi i nie da się go jednocześnie przeczytać i zrozumieć.
  1. CREATE TABLE `sessions` (
  2. `session_id` varchar(32) BINARY NOT NULL DEFAULT '',
  3. `session_user_id` mediumint(8) UNSIGNED NOT NULL DEFAULT '0',
  4. `session_forum_id` mediumint(8) UNSIGNED NOT NULL DEFAULT '0',
  5. `session_last_visit` int(11) UNSIGNED NOT NULL DEFAULT '0',
  6. `session_start` int(11) UNSIGNED NOT NULL DEFAULT '0',
  7. `session_time` int(11) UNSIGNED NOT NULL DEFAULT '0',
  8. `session_ip` varchar(40) BINARY NOT NULL DEFAULT '',
  9. `session_browser` varchar(150) BINARY NOT NULL DEFAULT '',
  10. `session_forwarded_for` varchar(255) BINARY NOT NULL DEFAULT '',
  11. `session_page` blob NOT NULL,
  12. `session_viewonline` tinyint(1) UNSIGNED NOT NULL DEFAULT '1',
  13. `session_autologin` tinyint(1) UNSIGNED NOT NULL DEFAULT '0',
  14. `session_admin` tinyint(1) UNSIGNED NOT NULL DEFAULT '0',
  15. PRIMARY KEY (`session_id`),
  16. KEY `session_time` (`session_time`),
  17. KEY `session_user_id` (`session_user_id`),
  18. KEY `session_fid` (`session_forum_id`)
  19. ) TYPE=MyISAM;
  20.  
  21. CREATE TABLE `sessions_keys` (
  22. `key_id` varchar(32) BINARY NOT NULL DEFAULT '',
  23. `user_id` mediumint(8) UNSIGNED NOT NULL DEFAULT '0',
  24. `last_ip` varchar(40) BINARY NOT NULL DEFAULT '',
  25. `last_login` int(11) UNSIGNED NOT NULL DEFAULT '0',
  26. PRIMARY KEY (`key_id`,`user_id`),
  27. KEY `last_login` (`last_login`)
  28. ) TYPE=MyISAM;

3) W jaki sposób rozwiązać problem z zapamiętaniem użytkownika, co wysyłać w ciastkach aby było w miarę bezpiecznie?


Nie przyjmuję gotowców! (choć chyba i tak nikt mi go dawać nie zamierzał (IMG:style_emoticons/default/winksmiley.jpg) ) Proszę tylko o jasne nakreślenie mi tego w jaki sposób mógłbym to napisać, aby było w miarę prosto, ale i bezpiecznie. Zaznaczam również, że lubię czytać i chętnie przyjmę posty dłuższe niż 3 zdania.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
marcio
post
Post #2





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Cytat
I najtrudniejsze pytanie - sesja stała, czyli cookies. Jak zweryfikować użytkownika? Po czym? IP odpada, gdyż jeżeli user będzie miał zmienne, to opcja "zapamiętaj mnie" będzie na dłuższą metę nic nie warta. Przeglądarka? Ok. Ale to chyba za mało. Może coś jeszcze jest o czym zapomniałem?

unikalne id user'a generowane za pomoca uniqid()

CO do systemu logowania:
sprawdzenie przegladarki
hash hasla normalka
anty brute force itp...itd... czyli ograniczona ilosc prob i bledow
filtrowanie zmiennych w zapytaniach slq
walidacja formularza logowania
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: 3.10.2025 - 05:00