Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
Witam.
Przypadek jest następujący:
Mamy serwis A który kontaktuje się z serwisem B - kontakt polega na przesłaniu zapytania w formie HTML, w każdym zapytaniu potrzeba przekazać mail oraz hasło, tak aby serwis B wiedział na czyje konto idą wykonywane usługi. No i teraz problem - jak w serwisie A przechowywać hasło do serwisu B, aby było ono bezpieczne? Hasło samo w sobie musi być w formie jawnej, tak aby serwis A mógł je wysłać do B - tak więc zwykłe haszowanie + salt raczej odpadają.
Z góry dzięki za informacje.
Offline
Ja bym zrobił hashe w bazie, i przesyłał hash z bazy przez sieć, na B też trzymał hashe nie hasła.
Taki hash wtedy działa tak, jakby był hasłem plaintext, ale przynajmniej nikt Ci nie zarzuci, że nieszyfrowane hasła w bazie trzymasz :D
I nie stosował Saltu, ale SHA256 lub SHA512.
A generowanie odpowiedniego hasha wtedy, gdy pacjent wpisuje hasło w przeglądarce.
Można nawet w javascripcie.
Oczywiście o połączeniu SSL między A i B pisać chyba nie muszę ;)
Ostatnio edytowany przez Jacekalex (2013-01-02 18:03:24)
Offline
tudzież opcja banalna base64 + rot :))
Offline
winnetou napisał(-a):
tudzież opcja banalna base64 + rot :))
To nie jest żadno szyfrowanie, każdy skrypciarz może to odkodować.
Takim base64+rot to można załapać się na niebezpiecznika, i trochę ludzi ubawić serdecznie. :D
Względnie mcrypt - i klucz symetryczny trzymany na obu maszynach, a hasło pomiędzy A i B szyfrowane Blowfishem albo AESem.
Offline
Dlaczego serwis B potrzebuje hasła użytkownika do określenia „na czyje konto idą wykonywane usługi”?
W zupełności wystarczyłoby uwierzytelnienie użytkownika po stronie serwisu A i generowanie jakiegoś unikatowego klucza transakcji podczas komunikacji między serwisem A i B.
Offline
Dzięki za info ale raczej tak nie da rady. Serwis B (w sumie mogłem to od razu podać - sorry że tak nie zrobiłem) to strona z paczkomatami InPost (paczkomaty.pl). Integruję to z poziomu .NET'u więc nie mam dostępnego API, a jedynie zapytania html'owe w stylu:
https://api.paczkomaty.pl/?do=getsticker&email=tutaj_mail&password=to_nieszczęsne_hasło&inne parametry...
Generalnie już to obkodowałem i działa problem w tym że CMS z którym to integruje jakoś musi umożliwiać wpisywanie tego hasła z poziomu panelu administracyjnego, jak i jego późniejsze odczytywanie do formy jawnej, tak aby można je było wysłać do strony InPostu. Pytanie jak to zrobić żeby było jak najbezpieczniej.
Offline
Na pewno nie zapisuj hasła jawnie.
Jeśli już musisz je zapisać w bazie, to zaszyfruj je dwustronnie — tak aby znanym tylko tobie algorytmem (jakiś skrót zasolonego skrótu?) dało się je rozkodować. Nadal jest to niebezpieczne (hasło można odczytać), ale odrobinę mniej (po zdobyciu dostępu do bazy trzeba jeszcze wiedzieć jak odczytać).
Offline
@azhag:
Są do tego dostępne jakieś gotowe algorytmy z których mógłbym skorzystać?
Generalnie jak to miało by wyglądać bo trochę nie mogę sobie tego wyobrazić - jeżeli zakoduję hasło to gdzieś w bazie będę musiał trzymać klucz dekodujący (bo jak inaczej CMS je dla siebie zdekoduje?), a to w zasadzie sprawia że w przypadku włamania równie dobrze można tego kodowania nie mieć bo i tak włamywacz sobie je odczyta (OK może będzie się musiał ciutkę bardziej wysilić, ale...). Tak na pierwszy rzut oka wydaje się że nie ma tutaj dobrego rozwiązania...
Offline
Huk napisał(-a):
@azhag:
Są do tego dostępne jakieś gotowe algorytmy z których mógłbym skorzystać?
Jakieś są. Nie tylko możesz, ale musisz — jedna z ważniejszych zasad mówi „nie twórz własnych algorytmów szyfrowania, bo spartolisz”. Ale sam konkretnie nic nie poradzę, bo jestem laik — pozwolę się wypowedzieć komuś z większym (jakimkolwiek) doświadczeniem.
Huk napisał(-a):
Tak na pierwszy rzut oka wydaje się że nie ma tutaj dobrego rozwiązania...
Słusznie. ;)
Jak napisałem zaszyfrowanie dwustronne jest tylko odrobinę lepsze — jak już osoba niepowołana zdobędzie dostęp na całego, to i tak odczyta (choć zajmie jej to więcej czasu). Ale w sytuacji gdy tylko zdobędzie dostęp do bazy danych (np. przez SQL injection) to hasło — wydaje mi się — będzie względnie bezpieczne. W każdym razie na pewno jest to lepsze niż podanie na talerzu PASSWORD=admin1.
Offline
MySQL oferuje szyfrowanie symetryczne. Przy zapytaniu do bazy (zapisującym/odczytującym) dany rekord podajesz klucz jaki ma być używany przy odkodowaniu. Można też się pobawić i zrobić taki trick:
Robisz sobie zamiast bazy robisz sobie plik który potem szyfrujesz przez gpg2 (np z taką strukturą: mail:haslo:komentarz). A w php żeby się dobrać do danego maila musisz go sobie zdekodować przez gpg2 -d plik (przy czym passphrase niestety musi być jawnie w skryptach podane) także tak czy siak jesteś w czarnej d* ;)
Bo jak się dobiorą do bazy to mogą prędzej czy później wpaść na to jak jest to szyfrowane, jak się dobiorą do plików to znajdą passphrase.
A co do base i rot to był przykład z przymrużeniem oka
Offline
winnetou napisał(-a):
MySQL oferuje szyfrowanie symetryczne. Przy zapytaniu do bazy (zapisującym/odczytującym) dany rekord podajesz klucz jaki ma być używany przy odkodowaniu.....
Masz pod ręką jakiś przykład w tym zakresie?
Bo przyda się do Dovecota....
Offline
Offline
Huk napisał(-a):
Dzięki za info ale raczej tak nie da rady. Serwis B (w sumie mogłem to od razu podać - sorry że tak nie zrobiłem) to strona z paczkomatami InPost (paczkomaty.pl). Integruję to z poziomu .NET'u więc nie mam dostępnego API, a jedynie zapytania html'owe w stylu:
Kod:
https://api.paczkomaty.pl/?do=getsticker&email=tutaj_mail&password=to_nieszczęsne_hasło&inne parametry...Generalnie już to obkodowałem i działa problem w tym że CMS z którym to integruje jakoś musi umożliwiać wpisywanie tego hasła z poziomu panelu administracyjnego, jak i jego późniejsze odczytywanie do formy jawnej, tak aby można je było wysłać do strony InPostu. Pytanie jak to zrobić żeby było jak najbezpieczniej.
Rozumiem, że to w .NET napisane.
Ja do zabezpieczania konfiguracji połączenia z bazą używam DPAPI.
Przykład zastosowania:
http://msdn.microsoft.com/en-us/library/system.conf … vs.80%29.aspx
Parę uwag odnośnie konfiguracji i bezpieczeństwa tej technologii:
http://www.passcape.com/index.php?section=docsys&am … &id=28#14
Offline
Strony: 1