Jesteś tutaj: webmade.org >> porady >> php + mysql
autor: Andrzej Kretowicz, ostatnia modyfikacja: 2007-02-23
Czasami jest tak, że musimy stworzyć system logowania – wtedy potrzebujemy przechować gdzieś hasło. Dobrym sposobem jest zahashowanie hasła i zapisanie w sesje, ale co jeśli musimy je także odczytać?
Na taki problem natknąłem się tworząc panel użytkownika kont shell, nie mogłem zapisać hasła w postaci hashu, bo za każdą próbą logowania (odświeżeniem strony) trzeba było podać hasło, a zapisanie go do sesji czy cookies wydawało mi się mało bezpieczne.
Wymyśliłem sposób na to: zapisywanie hasła w postaci zaszyfrowanej w sesji, a klucz potrzebny do rozszyfrowania trzymany jest w ciasteczku. W ten sposób bez połączenia tych dwóch elementów (przeglądarka i serwer) nie można odczytać hasła.
W praktyce całe rozwiązanie sprowadza się do użycia czegoś do generowania haseł (ja skorzystałem z klasy z joggera Radzia) oraz szyfrowania (użyłem klasy Rc4crypt). Napisałem do tego dwie funkcje:
<?php include 'rc4.class.php'; include 'password.class.php'; function sp($_pass) { if (empty($_COOKIE['haslo'])) { $_pas = new password; $_key = $_pas->password(); // generowanie klucza setcookie('haslo', $_key, time()+3600); // zapisanie klucz do COOKIE unset($_pas); // usunięcie zmiennej } else $_key = $_COOKIE['haslo']; // odczytanie klucza z ciasteczka return rc4crypt::encrypt($_key, $_pass, 1); // zaszyfrowanie } function dp($_password) { if (!empty($_COOKIE['haslo'])) { $_key = $_COOKIE['haslo']; // pobranie klucza $_pass = rc4crypt::decrypt($_key, $_password, 1); // rozszyfrowanie return $_pass; } else { return false; } } ?>
Oby skorzystać z tych funkcji wystarczy po zalogowaniu zapisać zakodowane hasło do sesji:
<?php $_SESSION['user'] = $_POST['user']; // username z $_POST; $_SESSION['password'] = sp($_POST['password']); // i hasło z $_POST ?>
Natomiast w momencie, gdy chcemy użyć tego hasła, np. do logowania się na ssh, użyjemy:
<?php $_ssh2connection = ssh2login($_SESSION['user'], dp($_session['password']), 22); ?>
Andrzej Kretowicz
szukaj: hasła bezpieczeństwo szyfrowanie kryptografia PHP
Osoby czytające tę publikację przeglądały również:
© 2004-2008 copyright by webmade.org