Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Bezpieczne logowanie
Forum PHP.pl > Forum > PHP
Fipaj
Tworzę ostatnio panel administracyjny, w którym będę miał dostęp do prostego cmsa, itp.
Oto pliki:
[zaloguj.php]
  1. <?
  2. $poprawny_login = 'admin'; 
  3. $poprawne_haslo = 'test'; 
  4. if (isset ($login) && isset ($haslo)) { 
  5.     if ($login == $poprawny_login && $haslo == $poprawne_haslo) { 
  6.         session_start(); 
  7.         $_SESSION['login'] = TRUE;
  8.         header(&#092;"Location: index.php?\" . SID); 
  9.         exit(); 
  10.     } 
  11.     else { 
  12.         echo 'Błędny login lub hasło!'; 
  13.     } 
  14. } 
  15. else {
  16. ?> 
  17. <form method=\"post\" action=\"login.php\"> 
  18. Login: <input type=\"text\" size=\"20\" name=\"login\"><br> 
  19. Hasło: <input type=\"password\" size=\"20\" name=\"haslo\"><p> 
  20. <input type=\"submit\" value=\"Zaloguj\"> 
  21. </form> 
  22. <? 
  23. } 
  24. ?>

[wyloguj.php]
  1. <?php
  2.  
  3. print ('Zostałeś wylogowany.'); 
  4. unset ($_SESSION);
  5.  
  6. ?>

[chronione.php]
  1. <?php
  2.  
  3. if (!isset ($_SESSION['login'])) { 
  4.     header (&#092;"Location: login.php\"); 
  5.     exit(); 
  6. }
  7.  
  8. ?>

I mam teraz pytanie: jak poprawić żałosny poziom bezpieczeństwa tego systemu??
Haszować?? md5()questionmark.gif crypt()questionmark.gif
Proszę o radę...
Speedy
Ja powiem tak:
Nie powinieneś zostawiać nie zahaszowanych haseł. Takie dane zawsze trzeba w jakiś sposób zabezpieczyć. Możesz np. zrobić sobie jakiś własny, mały algorytm szyfrujący, a następnie ciąg zaszyfrowany tym algorytmem dodatkowo zaszyfrować md5 lub odwrotnie.
Wg mnie poufnych danych, takich jak hasła, nigdy nie powinno się zostawiać w formie plain text. Niezależnie od tego, czy hasło znajduje się w bazie, pliku, czy też w skrypcie.

Pozdrawiam.
kszychu
Cytat(Speedy @ 2005-02-25 14:36:01)
Możesz np. zrobić sobie jakiś własny, mały algorytm szyfrujący, a następnie ciąg zaszyfrowany tym algorytmem dodatkowo zaszyfrować md5 lub odwrotnie.

A po co? Samo md5 jest za mało bezpieczne?
A wracając do pytania, to ja bym tych danych nie trzymał w skrypcie tylko w bazie.
Fipaj
Taaaak... Zrobiłem już dostęp zahaszowany md5 i zawartość z bazy danych. Dzięki za podpowiedzi winksmiley.jpg
plewa
Według mnie algorytm md5() jest już za stary. Spróbuj czegoś nowszego. Już lepiej crypt().
Fipaj
Ale crypt() jest tylko jednokierunkowy sad.gif
krysk
A po co CI dwukierunkowość?
Hasło sprawdzasz mniej/więcej w ten sposób:

  1. <?
  2. if ($login == $poprawny_login && md5($haslo) == $poprawne_haslo)
  3. {
  4. }
  5. ?>


oczywiście poprawne hasło masz zahashowane.
ActivePlayer
a md5 jest dwukierunkowe ?
strife
Cytat(ActivePlayer @ 2005-02-26 21:00:47)
a md5 jest dwukierunkowe ?

hmm... znowu http://forum.php.pl/index.php?showtopic=26920
Fipaj
@krysk: rzeczywiście można tak zrobić... trzeba by mieć np. zahaszowane md5 hasło w pliku, odczytywać je i porównywać z zahaszowanym hasłem wpisanym w formularzu... spróbowałem i zadziałało...
MStaniszczak
Witam

To ja polecam jeszcze:
- dodać blokowanie możliwości logowania z konta X na Y minut w przypadku N nieudanych prób logowania
- blokowanie konta X na Y minut przy zbyt szybkich próbach logowania (próba złamania hasła przez automat)
- blokowania IP liczba nieudanych prób logowania na konto X przekroczyła Y
- blokowanie IP jeśli próbuje logować się na losowe nazwy użytkowników z niepoprawnymi hasłami
-
Pozdrawiam
Marcin Staniszczak
Fipaj
Całkiem dobre pomysły, Marcin. Tyle że trudne dla mnie do wykonania...

nie za bardzo łapię co zrobić by zablokować IP... Może mi podpowiecie??
MStaniszczak
Witam

Można po $_SERVER['REMOTE_ADDR'], jednak blokowanie po IP nie jest niestety w 100% doskonałe (dlatego chyba też lepiej blokować czasowo) gdyż jak jakaś sieć stoi za PROXY które nie przekazuje prawdziwego IP usera to blokujesz całą sieć - sorki jeśli mówię nie jasno;-) Maiłem dluuuugą noc;-)

Pozdrawiam
Marcin Staniszczak
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.