Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql] Przetrzymywanie haseł w bazie.
Forum PHP.pl > Forum > Przedszkole
luis2luis
Witam.

Potrzebuje przetrzymywać w bazie danych hasła, które muszę odczytywać w dowolnej chwili. Są to hasła do zewnętrznych serwisów, poczty i muszę je dekodować w dowolnej chwili.

Jakie są nowe mechanizmy kodowania tak, żeby w przypadku wypłynięcia bazy lub włamania do mysql byle dzieciak nie miał podanych gotowych haseł.


W google znalazłem bardzo dużo tutoriali, nie wiem który najlepszy.

Czy jakiś doświadczony programista może podpowiedzieć jak robi takie rzeczy u siebie? Docelowo skrypt działać będzie na php 7.2
dublinka
Najbezpieczniej jest chaszowac za pomoca https://www.php.net/manual/en/function.password-hash.php
Tomplus
@Dublinka,

hashować, a nie chashować.


Dwa... wyraźnie powiedział że potrzebuje mieć możliwość haseł surowych, bo takie hasła potrzebne są do połączenia z innymi serwisami (jeżeli nie mają odpowiedniego API), a password-hash to kodowanie jednostronne.

Ja polecę:
https://stackoverflow.com/questions/1660070...pt-a-php-string
dublinka
Cytat(Tomplus @ 11.08.2019, 08:29:44 ) *
@Dublinka,

hashować, a nie chashować.

W tym momencie nie jest to tak istotne.
Cytat(Tomplus @ 11.08.2019, 08:29:44 ) *
Dwa... wyraźnie powiedział.

Raczej napisal.
A ja nie polecam.
Hasla powinno sie CHaszowac.
viking
Najgorsze co możesz zrobić to zabierać się za to samemu.
https://github.com/phpseclib/phpseclib
batman
Cytat(viking @ 11.08.2019, 09:24:06 ) *
Najgorsze co możesz zrobić to zabierać się za to samemu.


Zgadzam się z przedmówcą, przy czym ja bym polecił https://www.vaultproject.io
Tomplus
@Dublinka
Ale hashowanie haseł jest jednostronne.
dublinka
Cytat(Tomplus @ 11.08.2019, 11:10:01 ) *
@Dublinka
Ale hashowanie haseł jest jednostronne.

Doskonale o tym wiem.
Wiem tez co napisal autor ale dalej twierdze (zreszta osoby w tym Twoim poscie rowniez) ze kodowanie i odkodowywanie danych zwlaszcza hasel jest zlym rozwiazaniem.
Tomplus
Mnie zastanawia co innego. Jakie a raczej do czego hasła chce szyfrować?
Trzymanie haseł do poczty czy jakiś serwisów gdzie można prowadzić zmiany to zły pomysł.

Ja miałem przypadek gdzie serwis oferował specjalne hasło do logowania w trybie TYLKO DO ODCZYTU. Brak dostępu do danych osobowych, jedynie dawał wgląd do statystyk konta.
W takim przypadku proste szyfrowanie może wystarczyć.
luis2luis
Cytat(dublinka @ 11.08.2019, 14:18:48 ) *
Doskonale o tym wiem.
Wiem tez co napisal autor ale dalej twierdze (zreszta osoby w tym Twoim poscie rowniez) ze kodowanie i odkodowywanie danych zwlaszcza hasel jest zlym rozwiazaniem.



To jak się połączysz z pocztą IMAP z takim hashowanym hasłem?
Jak się połaczysz z Allegro, albo TPAY.com?

Niestety hasła muszą być surowe, nie chce jedynie, żeby były podane na tacy każdemu dzieciakowi który przez przypadek wpadnie w posiadanie haseł.

P.S. Poprzeglądam Wasze propozycje, jest jednam mętlik, dosyć dużo propozycji.
Tomplus
Ja np. trzymam hasła do usług poczta, baza danych czy klucze dostępu w folderze po za główny katalog strony. Tak aby np. z poziomu FTP nie można było skopiować plików ustawień. Tylko główny admin z uprawnieniami roota ma dostęp.
kapslokk
Cytat(dublinka @ 11.08.2019, 14:18:48 ) *
Doskonale o tym wiem.
Wiem tez co napisal autor ale dalej twierdze (zreszta osoby w tym Twoim poscie rowniez) ze kodowanie i odkodowywanie danych zwlaszcza hasel jest zlym rozwiazaniem.

To jest dość zabawne, jak upierasz się przy swoim zdaniu, pomimo tego, że @Tomplus, cały czas podaje Ci argumenty, które obalają Twoją teorię. Jak chcesz wykonać request do np. zewnętrznego API, które wymaga jakiegoś hasła/klucza, jeżeli zahaszujesz sobie ten klucz password_hash'em? W takich przypadkach musisz mieć możliwość odszyfrowania hasła.
dublinka
Cytat(kapslokk @ 13.08.2019, 10:47:52 ) *
To jest dość zabawne, jak upierasz się przy swoim zdaniu, pomimo tego, że @Tomplus, cały czas podaje Ci argumenty, które obalają Twoją teorię.

w takim raie idz na ten temat i obalaj teroie kazdego smile.gif
batman
Cytat
P.S. Poprzeglądam Wasze propozycje, jest jednam mętlik, dosyć dużo propozycji.

Zamiast wymyślać koło na nowo, użyj gotowego rozwiązania, które jest przetestowane i bezpieczne - https://www.vaultproject.io/ Dane dostępowe do Vault (nazwa użytkownika, hasło, token, itp. - ich ilość oraz rodzaj zależy od backendu użytego to logowania) trzymasz jako zmienne środowiskowe. W ten sposób żadne hasła nie są przechowywane w bazie i nawet jeśli ktoś dostanie się do bazy, nie wykradnie haseł do zewnętrznych serwisów.

Jeśli nie chcesz korzystać z Vault masz kilka innych możliwości - AWS Secrets Manager, Ansible Vault, Docker secrets (tylko w trybie swarm), Kubernetes secrets. Podejrzewam, że dałoby się znaleźć jeszcze kilka godnych zaufania usług.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.