Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF]Walidator dla zahashowanego hasła
Forum PHP.pl > Forum > PHP > Frameworki
amii
Robię standardowy formularz zmiany hasła, potrzebuje sprawdzić czy podane stare hasło jest zgodne z tym zapisanym w bazie.
Zend_Validate_Db_RecordExists byłby rozwiązaniem gdyby można mu było dostarczyć zahashowane hasło.

Jak sprawdzić w walidatorze, czy hasło jest zapisane w bazie jeśli w bazie jest w formie: SHA1('constant string from app'.$pass.'some random strong') a user wpisuje w formularzu jako $pass
Riggs
Coś podobnego robiłem niedawno.
Mam swoją bibliotekę do Zenda która generuje mi odpowiednie hasło. Z tym że ja przed hasłem doklejam sól główną z aplikacji (zapisaną w plikach) a za hasłem unikalną sól dla użytkownika (zapisana w bazie). Nie wiem czy dobrze myślę, ale chyba 'some random string' generujesz za każdym razem (bo wtedy za każdym razem otrzymasz inną wartość hasha)questionmark.gif
amii
Riggs u mnie hashowanie odbywa się tak samo 'constant string from app' jest na stale zapisany w plikach, natomiast 'some random strong' jest generowany losowo jako 50 znakowy ciąg liter, cyfr i znaków specjalnych i jest zapisywany w bazie jako salt. Póżniej obydwa ciągi są doklejane do hasła, heszowane i zapisywane w bazie jako zaszyforwane hasło.
Chcąc to złamać hacker musiałby jednocześnie włamać się do bazy i na serwer ftp oraz zastosować brute force na algorytmie sha1

Potrzebuje jedynie info na temat jak dostarczyć walidatorowi 'obrobione' hasło
viking
Najlepiej wyjść z założenia że to co robisz jest błędne smile.gif Standardem w takiej sytuacji jest raczej zapisanie tego nowego hasła bez martwienia się jak złamać własną metodę hashowania.
amii
Problem prawie rozwiązany. Zrobiłem tak:
1. Filtr w My_Filters_Hash
  1. class My_Filters_Hash implements Zend_Filter_Interface
  2. {
  3. public function filter($value)
  4. {
  5. $m = new Application_Model_DbTable_Users();
  6. $sql = 'SELECT salt FROM users WHERE id = ?';
  7. $id = Zend_Auth::getInstance()->getIdentity()->id;
  8. $salt = $m->getAdapter()->fetchOne($sql, $id);
  9. $valueFiltered = sha1(Zend_Registry::get('salt') . $value . $salt);
  10.  
  11. return $valueFiltered;
  12. }
  13. }


Filtr podłączony pod pole tylko problem jest taki, że do pola formularza zwraca zahaszowaną wartość zakładam, że to jest hash dla pustej wartości. Kiedy zwrócę z filtra pustą wartość to wtedy nic nie jest widoczne.

EDIT: jak formularz się żle zwliduje trzeba bylo dać przed przekazaniem do widoku, teraz śmiga:
  1. $form->setElementFilters(array());
  2. $this->view->form = $form;
Riggs
Ja akurat nadpisałem metodę isValid formularza i w niej pobieram oba hashe, generuję skrót i zwracam TRUE albo FALSE (dodając komunikat o niezgodności haseł).
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.