To jest tylko wersja do druku, aby zobaczyć pełną wersję tematu, kliknij TUTAJ
phpBB2 by Przemo
Support forów phpBB2 modified by Przemo

Konwersje, przenoszenie, łączenie forów, integracje - Zmuszenie 1.12.7 do zapisywania hasła także w zwykłym md5

Kosimus - 10-09-2012, 01:09
Temat postu: Zmuszenie 1.12.7 do zapisywania hasła także w zwykłym md5
Mam zbudowany mały system złożony z forum Przema, z Mantisa (bugtracker) i MRBS (skrypt do rezerwacji pomieszczeń, sprzętu itp.). Nie są zintegrowane z forum w pełnym tego słowa znaczeniu, ale korzystałem z tego, że wszystkie używają zwykłego, niesolonego md5 do zapisywania haseł. A raczej tak było do update do 1.12.7.
Problem polega na tym, że do bazy danych forum podpięte są pozostałe dwa skrypty. Po prostu pobierają sobie zeń użytkowników i hasła. I w tej chwili, po update do 1.12.7 wszystko wzięło w łeb, bo nie mamy już czystego md5 w hasłach, zatem pobrane dane z bazy forum nie działają w MRBS i Mantisie.

Potrzebuję więc zmusić forum, by oprócz obecnego zapisu hasła, nadal tworzyło także zapis w zwykłym md5. Jakieś dodatkowe pole w tabeli phpbb_users byłoby okej. Tak chyba będzie najprościej. Mam kopię bazy sprzed aktualizacji, więc mogę wpisać stare wartości md5 ręcznie do nowego pola, ale forum powinno także aktualizować hasło w nowym polu md5 w kilku przypadkach:
1. User zmienia hasło.
2. User używa przypomnienia hasła.
3. Rejestruje się nowy użytkownik.
4. Admin zmienia hasło.

Jakieś propozycje gdzie i jaki kod wstawić?

maminowiec - 10-09-2012, 11:49

A nie lepiej zmienić sprawdzanie tych haseł (na obecny system Przemo) w MRBS i Mantisie ?
Kosimus - 10-09-2012, 12:34

Wtedy musiałbym modyfikować dwa skrypty zamiast jednego, więc raczej nie ;) .

[ Dodano: 12-09-2012, 11:21 ]
Looknąłem w funkcje i zmieniłem zdanie :D . Prościej będzie zmusić MRBS do współpracy :p. Dodałem nowy rodzaj logowania przez zewnętrzną bazę:

Kod:
function authValidateUser($user, $pass)
{
  global $auth;

  $retval = 0;

  $user = strtolower($user);

  if (empty($auth['db_ext']['db_system']))
  {
    $auth['db_ext']['db_system'] = 'mysql';
  }

  $conn = sql_connect($auth['db_ext']['db_system'],
                      $auth['db_ext']['db_host'],
                      $auth['db_ext']['db_username'],
                      $auth['db_ext']['db_password'],
                      $auth['db_ext']['db_name']);

  $user = addslashes($user);

  $query = "SELECT " . $auth['db_ext']['column_name_password'] .
           " FROM " . $auth['db_ext']['db_table'] .
           " WHERE ". $auth['db_ext']['column_name_username'] . "='$user'";

  $r = sql_query($query, $conn);

  if ($r && (sql_count($r, $conn) == 1)) // force a unique match
  {
    $row = sql_row($r, 0, $conn);

    switch ($auth['db_ext']['password_format'])
    {



//Tu się zaczyna to, co sam dodałem

case 'phpbb':
        $itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
    if($pass == '' || is_array($pass)) { return 0; }
    if (strlen($hash) == 34)
   
    {
        return (_hash_crypt_private($pass, $hash, $itoa64) === $hash) ? 1 : 0;
    }
    {
    $retval = 1;
    }
    //return 0;
        break;


Problem polega na tym, że w ten sposób można się zalogować podając dowolne hasło. Co zrobić, by działało tylko poprawne hasło?



Powered by phpBB modified by Przemo © 2003 phpBB Group