jak zrobić to profesjonalne logowanie?

0

witam,
we wszystkich poradnikach php zazwyczaj nikt nie pokazuje jak poprawnie zrobić system logowania
tu moje pytanie
Do szyfrowania danych (haseł w bazie danych) czego najlepiej użyć?
Czemu dane sesyjne szyfruje się używając JWT? (czy ogólnie sesje już na starcie nie są niedostępne dla użytkownika?)

0

Jeśli zależy Ci na gotowym wyniku to odwiedź stronę laravela, tam jest narzędzie które potrafi postawić szkielet aplikacji już z rejestracją i logowaniem. Zacznij od tego :)

0

Czemu chcesz szyfrować hasła? Lepiej po prostu je za hashować.

1
Yukiteru Gromadzki napisał(a):

Czemu chcesz szyfrować hasła? Lepiej po prostu je za hashować.

Zauważ, że autor wątku to typowy początkujący, który nie rozróżnia hashowania od szyfrowania. Poza tym w twojej wypowiedzi widzę również błąd, haseł użytkowników nie wolno szyfrować, a ty podszedłeś, do tego jak do gorszej alternatywy.

0
mr_jaro napisał(a):
Yukiteru Gromadzki napisał(a):

Czemu chcesz szyfrować hasła? Lepiej po prostu je za hashować.

Zauważ, że autor wątku to typowy początkujący, który nie rozróżnia hashowania od szyfrowania. Poza tym w twojej wypowiedzi widzę również błąd, haseł użytkowników nie wolno szyfrować, a ty podszedłeś, do tego jak do gorszej alternatywy.

czyli oznacza to, że mogę użyć algorytmów hashujących dostarczanych przez phpa? bo ogólnie myślałem, że lepiej jest mieć możliwość odszyfrowania hasła.

0
Słonecznik napisał(a):

czyli oznacza to, że mogę użyć algorytmów hashujących dostarczanych przez phpa? bo ogólnie myślałem, że lepiej jest mieć możliwość odszyfrowania hasła.

do trzymania haseł używaj hashowania dostarczonego przez php minimum algorytmem bcrypt a obecnie zalecanym przez wszystkich jest argon2id dostępny w php od wersji jeśli się nie mylę 7.2 haseł użytkowników nikt nie ma prawa znać oprócz użytkownika!!!

3

Algorytmy, srytmy, jak ktoś ma dostęp do twojej bazy to masz większy problem niż siła algorytmów :D

0
czysteskarpety napisał(a):

Algorytmy, srytmy, jak ktoś ma dostęp do twojej bazy to masz większy problem niż siła algorytmów :D

Wiadomo, ale jak ktoś już się włamał to ograniczmy skutki, także róbmy wszystko zgodnie z obecnymi normami, zaleceniami i prawem. Miałem parę lat temu włamanie do serwera swojego przez błąd admina, jakby ktoś jeszcze mógł odczytać lub zrobić kolizje hasła userów to bym się chyba powiesił.

0

jeszcze nie powstała funkcja: md5_decode($twoje_haslo); :D

0

Ostatnio była afera na wykopie, ktoś przejmował konta, okazało się, że ludzie stosują hasła dupa123 (i to jedno do kilku portali) i potem zdziwienie, na głupotę nie poradzisz, ew. możesz wymusić długie+znaki specjalne.

0

@au7h ja tam widzę algorytmy na w miarę szybkie kolizje md5 sprzed 15 lat
@czysteskarpety jasne, ale wtedy to już nie moja wina

0

Na MD5 są generatory kolizji i znam jeden udokumentowany przypadek (dwa programy które mają to samo MD5 ale dają zupełnie inne wyniki) tymczasem Laravel używa tego w Filestore do cache. Czyżby to był powód do niepokoju? Ja jeszcze nie przeczytałem o kolizji na SHA-256 a poza tym jest jeszcze coś takiego jak PBKDF2 czyli pochodna gdzie tak naprawdę chodzi o to żeby całe obliczanie tego odbywało się wolno. Co do tutoriali to niestety (i chyba to już gdzieś nie raz widziałem) to właśnie MD5 był proponowany jako hash.

0

@drorat1 w cache nie ma znaczenia, bo on tylko koduje sobie nazwę zmiennej którą sam wymyślasz pisząc kod.

0
drorat1 napisał(a):

Ja jeszcze nie przeczytałem o kolizji na SHA-256

SHA2 raczej nikt nie złamie, bardziej chodzi o atak słownikowy na najbardziej banalne hasła, ale tutaj i tak siła algorytmu nie ma znaczenia więc kręcimy się w kółko.

0

@czysteskarpety: to samo mówiono o sha-1 a w 2017 złamano, tzn opracowane metody generowania kolizji

0

To faktycznie sukces, wymęczyli algorytm z 1993 roku, który w 2005 miał luki, a w 2010 był uważany jako przestarzały :)

0

Dlatego takie rzeczy robi się z wyprzedzeniem.

2

Tutaj pewien przykład:
https://www.php.net/hash-pbkdf2

function pbkdf2($algorithm, $password, $salt, $iterations, $key_length, $raw_output = false)
{
    $hash_length = strlen(hash($algorithm, null, $raw_output));
    $key_blocks = ceil($key_length / $hash_length);
    $derived_key = '';

    for ($block = 1; $block <= $key_blocks; $block ++)
    {
        $xorsum = $last = hash_hmac($algorithm, $salt . pack('N', $block), $password, true);

        for ($i = 1; $i < $iterations; $i ++)
        {
            $xorsum ^= ($last = hash_hmac($algorithm, $last, $password, true));
        }
        $derived_key .= $xorsum;
    }

    if (!$raw_output) $derived_key = bin2hex($derived_key);
    return substr($derived_key, 0, $key_length);
}

$password = 'qwerty12345';
$salt = 'SSxx3232sad21aA4';

$hash1 = hash_hmac('md5', $password, $salt);
$hash2 = pbkdf2('md5', $password, $salt, 1000, 32, false);

var_dump($hash1, $hash2);
string(32) "4f41e20685e5441e8f79d128a7414d92"
string(32) "8a92566f25eaaeb42cdb28727c24a230"

W obu przypadkach 32 znaki czyli załóżmy że zostały przechwycone hashe z bazy i 32 znaki może wskazywać na MD5, haker próbuje to łamać, robić jakieś kolizje, tymczasem nie, bo w serwisie jest jednak PBKDF2 który w tym przykładzie daje również 32 znaki a i wykonuje się dużo wolniej. Dodatkowo tajna sól którą haker również musiałby przechwycić próbując jakichś ataków słownikowych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1