2012-11-21 14 views
7

Trochę tła -Czy można bezpiecznie przechowywać hasła w postaci zwykłego tekstu w MySQL * tymczasowo *?

Prowadzę serwer gry działający w Javie oraz forum działające w PHP (phpbb). Mam połączone konta gry i forum, tak że zmiana hasła w grze automatycznie zmienia hasło do konta na forum. Oba systemy używają różnych algorytmów hashowania haseł i muszę zaktualizować hash hasła po stronie forum za pomocą wbudowanych funkcji phpbb, co oznacza, że ​​muszę je wywołać ze skryptu PHP (zamiast uruchamiać mój własny kod).

W tym celu postanowiłem wywołać skrypt PHP w języku Java, wysyłając żądanie HTTP do skryptu PHP za każdym razem, gdy trzeba zmienić hasło, aby uruchomić skrypt PHP, który zakończy proces zmiany hasła. konto na forum. Jednak nie chcę umieszczać hasła w postaci zwykłego tekstu w żadnym wywołaniu HTTP, ponieważ może ono być widoczne w plikach dzienników i być może w innych obszarach, które można wykorzystać. Mój obecny pomysł jest taki, że gdy strona Java zmienia hasła, umieszcza nowe hasło jawnego tekstu w tabeli bazy danych, a następnie wysyła żądanie HTTP, aby wywołać skrypt PHP, tak aby żadne hashe lub poufne informacje nie trafiały do ​​żądania HTTP. Wywołanie HTTP przekazuje tylko nazwę użytkownika konta, które ma zostać zmienione, oraz skrót mieszania md5 wspólnego hasła oraz nazwę użytkownika do uwierzytelnienia. Po uruchomieniu skryptu PHP pobiera on nowe hasło w postaci zwykłego tekstu dla użytkownika z bazy danych, natychmiast usuwa je, a następnie uruchamia hasło w postaci zwykłego tekstu za pomocą algorytmu haszowania phpbb i aktualizuje bazę danych forum.

W typowych warunkach hasło w postaci zwykłego tekstu prawdopodobnie znajdowałyby się w bazie danych przez mniej niż sekundę przed usunięciem. Idealnie nie przechowywałbym go nigdzie w ogóle, ale nie jestem pewien, jak inaczej komunikować potrzebną zmianę z Java do PHP, gdy nie mogę przewidzieć, jakie będzie hasło do hasła forum, więc muszę jakoś wysłać hasło w postaci zwykłego tekstu do skryptu PHP, który wykonuje mieszanie.

Wszelkie pomysły na lepszy sposób, aby to zrobić, lub czy istnieje jakaś informacja zwrotna na temat przechowywania hasła jawnego tekstu przez bardzo krótki okres czasu? Uważam logowanie MySQL za bezpieczne i nie jest udostępniane innym osobom ani projektom.

Dzięki!

+3

Czy możesz zaszyfrować go z Javy tuż przed zapisaniem go w DB i odszyfrowaniem go z PHP zaraz po przeczytaniu go z DB? – 0xFE

+2

Szyfrowanie to przyzwoity pomysł, ponieważ podobno masz już wspólny sekret. A co z wysłaniem nazwy użytkownika i hasła jawnego do PHP poprzez HTTPS i POST, np. Dane formularzy? – slashingweapon

+4

Co więcej, utwórz niestandardową wtyczkę do uwierzytelniania dla PHP BB https://wiki.phpbb.com/Authentication_plugins Obsługuje schematy uwierzytelniania niestandardowych haseł i powinna umożliwić skorzystanie z jednokrotnego logowania, jeśli dotyczy. –

Odpowiedz

0

Szyfrowanie jest sposobem.

  • Szyfrowane połączenie: synonim HTTPS. Przekaż dane do phpbb za pomocą protokołu HTTPS, jeśli twój serwer go obsługuje.
  • Zaszyfrowane dane: zaszyfruj hasło i jakoś przechowuj klucz (bardzo niebezpieczny) lub użyj szyfrowania asymetrycznego. Zobacz odpowiedź na my question, aby uzyskać dobry wgląd w sposób wysyłania hasła przez bezpieczny kanał.
+0

W moim przypadku ta metoda działa najlepiej, ponieważ wymaga najmniejszej ilości pracy. Zabieram mój istniejący skrypt PHP i używam go przez HTTPS i przekazuję hasła, które muszą zostać zaszyfrowane na zaszyfrowanym połączeniu. – DivideByHero

0

To zależy od bazy danych, której używasz z Javą bardziej niż PHP. W PHP użyj PDO, aby połączyć się z inną bazą danych i manipulować danymi. Możesz spróbować po prostu mieć jeden DB jako główne miejsce przechowywania haseł, a drugi jako maść - w zależności od tego, czy jesteś przeciwny szyfrowaniu.

Miej PHP (na przykład) PDO hasło tekstowe bezpośrednio do Java db w polu temp - specyficzne dla użytkownika oczywiście - a następnie powiedz PHP, aby uruchomił funkcję Java do odczytu tej kolumny, hash to, zaktualizuj popraw kolumnę i usuń pole temp.

Jeśli zrobisz to poprawnie, czasy na lukę w zabezpieczeniach będą ograniczone do kilku milisekund.

3

Nie przechowuj haseł w postaci zwykłego tekstu. Jeśli twoja gra staje się popularna, może być celem ciągłych ataków hakerów , zwłaszcza jeśli będzie zawierała aspekt pieniężny (np. W przypadku World of Warcraft, Travian i innych). W takim przypadku należy założyć, że mimo próby ochrony systemu, ktoś może włamać się do niego, aw rezultacie uzyskać poufne dane. Powinieneś użyć standardowych mechanizmów szyfrowania w celu wykonania tego zadania (tj. - wysłać hasło do systemu forum poprzez HTTPS na przykład w bezpieczny sposób). Chciałbym również polecić zapoznanie się z komentarzem @Joshua Kaiser - jednokrotne zalogowanie może być kluczem do zaspokojenia twoich potrzeb, i nie próbuj odkrywać koła tutaj.Mogę Ci powiedzieć, że pracuję z Kerbersem na przykład , a Kerberos ma mechanizm biletowy, w którym bilety mogą być ponownie wykorzystane między aplikacjami. Niestety nie znam PHP i nie wiem, jak można podłączyć framework forum do korzystania z różnych modułów uwierzytelniania.

P.S - Wysłałem tę odpowiedź dwukrotnie przez pomyłkę i spróbowałem nacisnąć "usuń wpis" - mam nadzieję, że stackoerflow się tym zajmie.

Powiązane problemy