Wojciech Sznapka

Wojciech Sznapka CTO @ STS Zakłady
Bukmacherskie

Temat: sfGuardUser - import bazy użytkowników z hasłami w md5

mam bazę użytkowników z hasłami w postaci md5 (bez salt). sfGuardUser trzyma to z salt'em, jak więc zaimportować te hasła?
Adam W.

Adam W. senior php
developer, Symfony

Temat: sfGuardUser - import bazy użytkowników z hasłami w md5

tak się zastanawiam i myślę, że jest to nie do zrobienia. musiałbyś znać te hasła w postaci jawnej.
są programy, które odgadują, ale nie wiem czy to ma sens.
Wojciech Sznapka

Wojciech Sznapka CTO @ STS Zakłady
Bukmacherskie

Temat: sfGuardUser - import bazy użytkowników z hasłami w md5

problem rozwiązany, trzeba zrobić klasę ImportsfGuardUser w lib/ nadpisującą settera hasła:

class ImportsfGuardUser extends sfGuardUser {
public function setPassword($v) {
parent::_set('password', $v);
}
}

i robić obiekt tej klasy przy imporcie:


$user = new ImportsfGuardUser();
$user->username = $row['login'];
$user->algorithm = 'md5';
$user->salt = NULL;
$user->password = $row['password'];
$user->save();
Wojciech Sznapka edytował(a) ten post dnia 20.02.09 o godzinie 17:01
Adam W.

Adam W. senior php
developer, Symfony

Temat: sfGuardUser - import bazy użytkowników z hasłami w md5

Wojciech Sznapka:
problem rozwiązany, trzeba zrobić klasę ImportsfGuardUser w lib/ nadpisującą settera hasła:

class ImportsfGuardUser extends sfGuardUser {
public function setPassword($v) {
parent::_set('password', $v);
}
}

i robić obiekt tej klasy przy imporcie:


$user = new ImportsfGuardUser();
$user->username = $row['login'];
$user->algorithm = 'md5';
$user->salt = NULL;
$user->password = $row['password'];
$user->save();
Wojciech Sznapka edytował(a) ten post dnia 20.02.09 o godzinie 17:01

a widzisz:) o tym żeby w salt dać null nie pomyślałem.
Wojciech Sznapka

Wojciech Sznapka CTO @ STS Zakłady
Bukmacherskie

Temat: sfGuardUser - import bazy użytkowników z hasłami w md5

null w soli to akurat tylko połowa sukcesu :-) nawet jak wstawisz tam nulla, to metoda setPassword sobie i tak wygeneruje sól i wstawi wraz z hasłem.
Adam W.

Adam W. senior php
developer, Symfony

Temat: sfGuardUser - import bazy użytkowników z hasłami w md5

Wojciech Sznapka:
null w soli to akurat tylko połowa sukcesu :-) nawet jak wstawisz tam nulla, to metoda setPassword sobie i tak wygeneruje sól i wstawi wraz z hasłem.

teraz ja mam z tym problem;)

mam tabelę profil, kolumny email, haslo, imie...

chcę przenieść hasła do tabeli sf_guard_user.
obecnie miałem hasła zapisane bez soli. jak to teraz zorganizować?
tworząc nowego użytkownika w tabeli sf_guard_user ustawić salt na null i po prostu skopiować do tabeli password dane z tabeli haslo?
bo inaczej chyba tego nie da się zrobić?
Adam W.

Adam W. senior php
developer, Symfony

Temat: sfGuardUser - import bazy użytkowników z hasłami w md5

Wojciech Sznapka:
problem rozwiązany, trzeba zrobić klasę ImportsfGuardUser w lib/ nadpisującą settera hasła:

class ImportsfGuardUser extends sfGuardUser {
public function setPassword($v) {
parent::_set('password', $v);
}
}

i robić obiekt tej klasy przy imporcie:


$user = new ImportsfGuardUser();
$user->username = $row['login'];
$user->algorithm = 'md5';
$user->salt = NULL;
$user->password = $row['password'];
$user->save();
Wojciech Sznapka edytował(a) ten post dnia 20.02.09 o godzinie 17:01

a jakim cudem udało Ci się to w ten sposób zrobić?
username jest protected i nie się tak do tego dostać.
hmm, ciekawe;)
a jak nadpisać metodę setPassword, ale tak żeby można było wykonać w niej parent::parent::setPassword ?:)

teraz mam tak:

importGuardUser
-\ sfGuardUser
-\ PluginsfGuardUser
-\ BasesfGuardUser


w metodzie importGuardUser::setPassword chcę wykonać metodę BasesfGuardUser::setPassword, z tym, że ta metoda jest również w PluginssfGuardUser.
Marek Wywiał

Marek Wywiał Programista,
administrator,
instruktor

Temat: sfGuardUser - import bazy użytkowników z hasłami w md5

Wojciech Sznapka:
null w soli to akurat tylko połowa sukcesu :-) nawet jak wstawisz tam nulla, to metoda setPassword sobie i tak wygeneruje sól i wstawi wraz z hasłem.

jedyne co wymyśliłem (i używam od dawna) to dodanie parametru do setPassword:
* public function setPassword($password, $plain = false)

i jego obsługa:

if ($plain === true) {
parent::setPassword($password);
} else {
parent::setPassword(call_user_func_array($algorithm, array($salt.$password)));
}

dla uproszczenia mam:

public function setPasswordPlain($password)
{
$this->setPassword($password, true);
}

w ten sposób mogę sobię spokojnie sync'ować userów pomiędzy wieloma serwisami (logowanie tym samym login/pass do wielu serwisów powiązanych)
Adam W.

Adam W. senior php
developer, Symfony

Temat: sfGuardUser - import bazy użytkowników z hasłami w md5

Marek Wywiał:
Wojciech Sznapka:
null w soli to akurat tylko połowa sukcesu :-) nawet jak wstawisz tam nulla, to metoda setPassword sobie i tak wygeneruje sól i wstawi wraz z hasłem.

jedyne co wymyśliłem (i używam od dawna) to dodanie parametru do setPassword:
* public function setPassword($password, $plain = false)

i jego obsługa:

if ($plain === true) {
parent::setPassword($password);
} else {
parent::setPassword(call_user_func_array($algorithm, array($salt.$password)));
}

dla uproszczenia mam:

public function setPasswordPlain($password)
{
$this->setPassword($password, true);
}

w ten sposób mogę sobię spokojnie sync'ować userów pomiędzy wieloma serwisami (logowanie tym samym login/pass do wielu serwisów powiązanych)

ale właśnie chodzi o to parent::setPassword.
ja zrobiłem taką klasę:

<?php
class importGuardUser extends sfGuardUser
{
public function setPassword($v)
{
BasesfGuardUser::setPassword($v);
}
}

i działa.
miałem wątpliwości czy takie coś mogło działać:
<?php 
class importGuardUser extends sfGuardUser
{
public function setPassword($v)
{
parent::setPassword($v);
}
}

ponieważ dokładanie soli odbywa się w sfGuardUser::setPassword - a to jest właśnie w tym przypadku parent:)Adam W. edytował(a) ten post dnia 22.04.09 o godzinie 23:11
Wojciech Sznapka

Wojciech Sznapka CTO @ STS Zakłady
Bukmacherskie

Temat: sfGuardUser - import bazy użytkowników z hasłami w md5

http://blog.sznapka.pl/import-uzytkownikow-z-haslami-w...
Adam W.

Adam W. senior php
developer, Symfony

Temat: sfGuardUser - import bazy użytkowników z hasłami w md5

Wojciech Sznapka:
http://blog.sznapka.pl/import-uzytkownikow-z-haslami-w...

ja mam wątpliwości co do tego rozwiązania. tzn nie wiem dlaczego Tobie to działa;)
ja zrobiłem to tak:
$sfUser = new importGuardUser();
$sfUser->setSalt(false);
$sfUser->setAlgorithm('sha1'); $sfUser->setUsername($username); $sfUser->setPassword($p->getHaslo());
$sfUser->setIsActive($p->getStatus());
$sfUser->save();

+ klasa, którą podałem wcześniej.

może dlatego Tobie to działa bo korzystasz z doctrine, nie wiem. zastanawia mnie to:

1. parent::_set('password', $v);
2. $user->algorithm = 'md5';


skąd się wzięła metoda _set ?
no i jak udaje się dotrzeć do chronionej właściwości?
Wojciech Sznapka

Wojciech Sznapka CTO @ STS Zakłady
Bukmacherskie

Temat: sfGuardUser - import bazy użytkowników z hasłami w md5

po to masz klasę importGuardUser, opakowującą GuardUSer, żebby dotrzeć do protected :-)
Hint: jeśli wpakujesz wszystkie md5 bezpośrednio do tabeli sf_guard_user z pominięciemi symfony, ustawisz algorytm md5 i salt NULL, to też powinno śmigać :-)

Następna dyskusja:

sand_box 1.1 zapytanie do z...




Wyślij zaproszenie do