Mam nastepujacy problem. W mojej aplikacji GWT sa serwisy pobierajace
dane z bazy. Autoryzacja userow do poszczegolnych czynnosci ma sie
opierac na uprawnieniach danego usera do bazy - czyli jak wyskoczy
wyjatek o braku uprawnien to mam sie martwiďż˝ :)
Podejscie dosc wygodne ale budzi 1 watpliwosc :
W formularzu logowania musze podac login i haslo w plaintext - przekazac
do serwisu ktory zwroci datasource badz nie. I zastanawiam sie na ile
jest to bezpieczne rozwiazanie...
--
Jacek
--
npe
Tak się zastanawiam - co ma dać (z punktu widzenia bezpieczeństwa)
taka operacja, żeby skrypt przerobił hasło na MD5 przed wysłaniem?
Jeśli to ma być zabezpieczenie przed podsłuchaniem hasła - to nic taki
zabieg nie da. Osobnik przechwyci MD5, a twój serwis i tak będzie
autoryzował na bazie pary [login+MD5(hasło)], więc to ten MD5 będzie
de-fakto hasłem.
> Tak si� zastanawiam - co ma da� (z punktu widzenia bezpiecze�stwa)
> taka operacja, �eby skrypt przerobi� has�o na MD5 przed wys�aniem?
> Je�li to ma by� zabezpieczenie przed pods�uchaniem has�a - to nic taki
> zabieg nie da. Osobnik przechwyci MD5, a tw�j serwis i tak b�dzie
> autoryzowa� na bazie pary [login+MD5(has�o)], wi�c to ten MD5 b�dzie
> de-fakto has�em.
Ano, tak to w�a�nie bywa, jak si� co� gdzie� us�yszy, nie przemy�li i
powtarza.
Oczywi�cie masz racj� a ja gadam g�upoty ;-)
--
npe
Wystarczy wys�a� klientowi jak�� losow� warto��, niech j� najpierw doklei do
has�a i ju� b�dzie (w miar�) ok.
--
MB
Nie rozumiem, możesz wyjaśnić? Kod JavaScript jest wszystkim znany,
więc i "włamywacz" go może go uruchomić. Serwis ma wg powyższej zasady
zawsze najpierw wysłać "coś" klientowi, który podaje hasło, które
następnie JavaScript modyfikuje i odsyła serwerowi jako _niby_
autoryzacja klienta.
To ja się pytam co to za zabezpieczenie, skoro wystarczy podsłuchać
konwersację i można się logować? No chyba, że zakładamy, że nikt nie
podsłuchuje, tylko wtedy po co w ogóle kombinować?
"Osobnik przechwyci MD5, a tw�j serwis i tak b�dzie
autoryzowa� na bazie pary [login+MD5(has�o)], wi�c to ten MD5 b�dzie
de-fakto has�em."
Teraz wysy�asz login+MD5(has�o+jednorazowy_token), przechwycenie tego nic nie
da, bo hash zadzia�a tylko raz - przy ka�dym logowaniu co innego jest
przekazywane do serwera i wcze�niejsze hashe nie s� ju� aktualne. Oczywi�cie
nie eliminuje to wi�kszo�ci problem�w (pods�uchiwanie po zalogowaniu dalej w
sumie pozwala na wszystko, mo�na szybko si� zalogowa� i dosta� do serwera przed
legalnym userem, itp).
--
MB
> "Osobnik przechwyci MD5, a tw�j serwis i tak b�dzie
> autoryzowa� na bazie pary [login+MD5(has�o)], wi�c to ten MD5 b�dzie
> de-fakto has�em."
>
> Teraz wysy�asz login+MD5(has�o+jednorazowy_token), przechwycenie tego
> nic nie da, bo hash zadzia�a tylko raz - przy ka�dym logowaniu co innego
> jest przekazywane do serwera i wcze�niejsze hashe nie s� ju� aktualne.
> Oczywi�cie nie eliminuje to wi�kszo�ci problem�w (pods�uchiwanie po
> zalogowaniu dalej w sumie pozwala na wszystko, mo�na szybko si�
> zalogowaďż˝ i dostaďż˝ do serwera przed legalnym userem, itp).
Nie kumasz chyba jak dziala GWT - cala aplikacje masz na dysku -
potencjalnie atakujacy moze zrobic eval() na kazdym kawalku kodu JS.
Widze ze SSL jest jedyna sensowna opcja w tym przypadku.
--
Jacek
No i co z tego? Niby w kt�rym miejscu "potencjalnie atakuj�cy" mia�by
skorzysta� ze znajomo�ci kodu w tym przypadku? A co do ssl to masz racj�.
--
MB
Przechwytujesz:
hasło+jednorazowy_token,
odrzucasz ten jednorazowy_token, pobierasz sobie nowy z serwera,
doklejasz i masz:
hasło+nowy_jednorazowy_token
i logujesz się.
OK, teraz widzę, że to było MD5(hasło+jednorazowy_token), ale w tym
wypadku serwer musiałby znać hasło, żeby sobie taką samą kombinację
wygenerować do sprawdzenia, czy hasło było poprawne, a jak wiadomo
nikt poza właścicielem nie powinien znać hasła. W takim razie powinno
być:
MD5(MD5(hasło) + jednorazowy_token)
Problem jest tylko taki, że serwer musiałby pamiętać wszystkie
wykorzystane tokeny, coś jak hasła jednorazowe. Na dodatek i tak
średnio to by wszystko działało, bo po zalogowaniu klient musi dostać
jakiś ID sesji - bez SSL można to przechwycić i zamiast się logować,
wystarczyłoby się podłączyć pod sesję użytkownika... Masa babrania a i
tak niewiele to ma wspólnego z bezpieczeństwem :)