Używam Code Igniter do mojego obecnego projektu.
W tej chwili używam MD5 do haszowania haseł, ale czytałem w wielu miejscach, że nie jest to dobrą praktyką.
Z czym powinienem iść?
- Używanie soli
- A może powinienem użyć bcrypt
Ponadto, jeśli zalecane jest bcrypt, to jak używać go z Code Igniter?
EDYTOWAĆ
Umieściłem te pliki w application/libraries
- HasłoHash.php
- c/Makefile
- c/crypt_private.c
W moim kontrolerze używam tego kodu -
$params = array(
'phpass_hash_strength' => 8,
'phpass_hash_portable' => FALSE
);
$this->load->library('PasswordHash', $params);
$password = $this->passwordhash->HashPassword($pwd);
Otrzymuję te błędy -
A PHP Error was encountered
Severity: Notice
Message: Uninitialized string offset: 3
Filename: libraries/PasswordHash.php
Line Number: 116
A PHP Error was encountered
Severity: Warning
Message: strpos() [function.strpos]: Empty delimiter
Filename: libraries/PasswordHash.php
Line Number: 116
Aktualizacja
Usunięto PasswordHash.php
, używając teraz SimpleLoginSecure.
3 odpowiedzi
Użyj bcrypt. Ta dyskusja pojawiła się tutaj w komentarzach do mojego odpowiedź. Możesz użyć biblioteki takiej jak phppass, aby naprawdę uprościć szyfrowanie hasła.
W sprawie soli. Użyj tego! W przeciwnym razie ktoś może po prostu wejść na tę stronę i pobrać tęczowe tabele, które obejmują większość haseł wybieranych przez przeciętnych użytkowników. Zwłaszcza ze względu na wszystkie wycieki bezpieczeństwa w ciągu ostatnich kilku miesięcy, teraz nie czas na mówienie, że nie użyjesz czegoś tak prostego do wdrożenia jak losowa sól.
AKTUALIZACJA
Aby używać PHPPass z CI, pobierz i rozpakuj pliki ze strony phppass, do której link znajduje się powyżej. Umieść plik PasswordHash.php w katalogu aplikacji/bibliotek CI.
W swoim kodzie ładujesz bibliotekę przez: $this->load->library('PasswordHash',array(8, FALSE));
Haszowanie haseł jest wtedy tak proste jak $this->PasswordHash->HashPassword($password);
Aby później sprawdzić, czy hasło jest poprawne, wystarczy:
$password = $_POST['password'];
$actualPassword = /*Get the hashed password from your db*/;
$check = $this->PasswordHash->CheckPassword($password, $actualPassword);
Pobrałem to demo z http://dev.myunv.com/ artykuły/bezpieczne-hasła-z-phpass/, który daje o wiele więcej informacji. Zmodyfikowałem nieco ten samouczek, aby wykorzystać moduł ładujący CI, dlatego nie potrzebujesz instrukcji include
ani new
.
Po co używać md5()
, skoro jest równie łatwy w użyciu sha1()
< /a> ?
Również zasolenie haseł jest zawsze dobrym pomysłem, ponieważ skutecznie usuwa zagrożenie ataku Tęczowej Tabeli
Z mojego doświadczenia wynika, że solony skrót SHA1 jest wystarczająco bezpieczny dla 99% aplikacji internetowych.
$this->ci->hash($password);
, a użyje sha1, jeśli jest dostępny na twoim serwerze. Dokumenty CI: codeigniter.com/user_guide/libraries/encryption.html
Code Igniter zmienił się od czasu, gdy zadano to pytanie. Jednak z korzyścią dla tych, którzy mogli nie natknąć się na obszerną dokumentację CI lub nie widzieli tego wcześniej, CI posiada klasę szyfrowania, która zapewnia dwukierunkowe szyfrowanie danych przy użyciu biblioteki PHP Mcrypt.
Po zainicjowaniu klasy za pomocą:
$this->load->library('encrypt');
Możesz zaszyfrować w następujący sposób:
$msg = 'My secret message';
$encrypted_string = $this->encrypt->encode($msg);
I odszyfrować w następujący sposób:
$encrypted_string = 'APANtByIGI1BpVXZTJgcsAG8GZl8pdwwa84';
$plaintext_string = $this->encrypt->decode($encrypted_string);
CI ma również niedekodowalne jednokierunkowe mieszanie:
$hash = $this->encrypt->sha1('Some string');
Aby uzyskać więcej informacji zobacz: http://www.codeigniter.com/user_guide/libraries/encryption.html
Podobne pytania
Powiązane pytania
Nowe pytania
codeigniter
CodeIgniter to Application Development Framework - zestaw narzędzi - dla osób, które tworzą strony internetowe przy użyciu PHP. Stworzony przez EllisLab, wspierany przez BCIT, jest teraz projektem Fundacji CodeIgniter. Struktura implementuje zmodyfikowaną wersję wzorca projektowego Model-View-Controller. Użyj tego tagu w przypadku pytań dotyczących klas, metod, funkcji, składni i użycia CodeIgniter. Istnieją dwie główne wersje: 3.x i 4.x, obsługujące różne wymagania systemowe
Missing argument 2 ...