Aktywne Wpisy
![youknowthisxd](https://wykop.pl/cdn/c0834752/d0124987320691b11ede871073dcd4f64a41aaa1a0b20a4707bcca3f8163bdf4,q60.jpg)
youknowthisxd +147
Jest godzina 23:03. Zaledwie godzinę temu dowiedziałem się od mamy że ojciec nie żyje. Jestem pijany w trzy dupy i slucham sobie muzyki choć nie ma to już żadnego sensu. Nie wiem co że sobą zrobić, zwykle czynności jak picie czy oddychanie przynoszą ogromny trud. Dziś w nocy prędko nie zasnę.
Pomyśleć że jeszcze parę dni temu oglądałem z tatą mecz Polski z Austrią i rozmawialiśmy, że Polska ma szansę wygrać i
Pomyśleć że jeszcze parę dni temu oglądałem z tatą mecz Polski z Austrią i rozmawialiśmy, że Polska ma szansę wygrać i
![youknowthisxd - Jest godzina 23:03. Zaledwie godzinę temu dowiedziałem się od mamy że...](https://wykop.pl/cdn/c3201142/8cca59203ca6970f308ed69ad9ab6ead286eec107921201a2f75f88daeafdf87,w150h100.jpg?author=youknowthisxd&auth=a6ed413a2d32dfd4104407d8fad05539)
![Britney16](https://wykop.pl/cdn/c0834752/95e9162ce3400085baf2f038f289a65a6e14c05eebd8de58bc4cbeb6eef375f8,q60.jpg)
Britney16 +6
Myślicie, że jak pisałam analizę finansową dino s.a. Na licencjacie to mogę napisać na magisterce analizę finansową innej spółki? Myslam o fame mma brzmi spoko i całkiem przyjemnie #pracalicencjacka #studbaza #magister #famemma #wychodzimyzprzegrywu #redpill #blackpill #logikaniebieskichpaskow #logikaniebieskichpaskow
Dlaczego więc nie warto używać
Random
w #java ? #od0dopentesteraKażdy szanujący się serwis posiada funkcjonalność resetowania hasła.
Użytkownik podaje na stronie swój adres email powiązany z kontem.
W tym momencie serwer sprawdza czy taki użytkownik istnieje w bazie danych.
Jeśli tak - generuje unikalny ciąg, który jest następnie zapisywany i wysyłany w emailu.
Następnie użytkownik odczytuje email i klika w zawarty tam odnośnik z zapisanym unikalnym kluczem.
Serwer sprawdza czy unikalny ciąg znajduje się w bazie danych - i jeśli wszystko się zgadza pozwala na zmianę hasła.
Nasz kod generujący unikalny token wygląda tak:
static Random r = new Random();
}static String getToken() {
return Integer.toString(r.nextInt());
Gdzie zatem znajduje się dzisiejszy błąd?
Klasa
Random
jest generatorem liczb pseudolosowych.Oznacza to że na podstawie niewielkiej ilości informacji - tak zwanego ziarna generuje ona deterministycznie kolejne liczby pseudolosowe.
Ziarno to może być zdefiniowane przez użytkownika - lub też jak w naszym przypadku ustawione automatycznie przez Jave.
Wystarczy więc odgadnąć jakie ziarno zostało użyte aby móc generować kolejne liczby tokena na własnym komputerze.
Do przywrócenia ziarna użyjemy kodu dostępnego na forum stackoverflow.
Do swojego działania potrzebuje on 2 kolejnych liczb wygenerowanych przez daną instancje klasy Random.
Jak je otrzymać? W przypadku funkcjonalności przypominania hasła jest to bardzo proste.
Wystarczy bowiem dwa razy poprosić o reset konta, do którego posiadamy uprawnienia a za trzecim razem spróbować zresetować konto admina.
Następnie odczytujemy 2 pierwsze wartości z maila, do którego dostęp posiadamy i przekazujemy je do funkcji.
Właśnie wygenerowaliśmy unikalny identyfikator, którego można by było użyć do resetowania hasła administratora.
Oczywiście zakładam tutaj, że mamy szczęście i pomiędzy naszymi próbami nikt inny nie wykonał tej samej akcji.
Jak zatem zabezpieczyć się przed tym problemem?
Zawsze używać klasy
SecureRandom
.Identyczny problem istnieje również z klasą
RandomStringUtils
.Tam jednak odzyskanie ziarna trwa nieco dłużej.
#security #bezpieczenstwo #programowanie #informatyka #it #nauka #technologia #ciekawostki
Jedyna prawilna metoda generowania liczb losowych XD jeszcze możnaby zmodyfikować żeby liczyło czas między pojedynczymi rejestracjami
Komentarz usunięty przez autora
Komentarz usunięty przez autora