Co można lepiej i dlaczego funkcje można używać nad definicją

Pytania i problemy
wazer
wazer

Co można lepiej i dlaczego funkcje można używać przed definicją https://pastebin.com/YkdCngec [ 'janusz', 'admin', 'somsiad' ], 'wallets' => [ 500, 200, 20000 ], 'passwords' => [ 'haslo',//haslo janusza 'admin',//haslo admina 'lvlup' ] ];

$login = 'somsiad';
$password = 'haslo';
helloUser($login, $password);

function helloUser(string $login, string $password)
{
    global $users;
    $userId = array_search($login, $users['names'], true);
    if (in_array(strtolower($login), $users['names'], true) and $password === $users['passwords'][$userId]) {
        echo 'Witaj ' . $login . ', w twoim portfelu jest ' . $users['wallets'][$userId] . ' zł!';
    } else {
        echo 'Zły login lub hasło';
    }
}
Majem
Majem

Hej,

1.Dlaczego funkcje można używać przed definicją - Możesz wywołać funkcję przed jej deklarację ze względu na to, że PHP jest najpierw parsowane a dopiero później wykonywane.

Co do tego co można zrobić lepiej. Przede wszystkim zbędne jest trzymanie wszystkich loginów oraz haseł. Źródłem loginów i haseł prawdopodobnie będzie baza danych. Wystarczy, że wyszukasz odpowiedni rekord. Trzymanie wszystkich danych bez względu na usera jest po prostu nieprawidłowe.

Kolejnym niebezpiecznym elementem jest operowanie hasłach bez szyfrowania. Najpopularniejszą funkcją do szyfrowania haseł przy uzyciu php jest md5

Axerr
Axerr

Na Twoim miejscu użyłbym bazy SQLite. Trzymanie użytkowników w array nie jest zbyt dobrym rozwiązaniem.

KMatuszak
KMatuszak Weteran

Majem:

Najpopularniejszą funkcją do szyfrowania haseł przy uzyciu php jest md5

to nie jest bezpieczne, obecnie stosuje się bcrypt 🙂 https://www.php.net/manual/en/function.password-hash.php

anon39691534
anon39691534

To nie jest jednoznaczne że koniecznie się używa BCrypta, jest wiele dobrych, wartych uwagi metod hashowania. Przykładowo można zastosować SHA-256 z użyciem soli lub czystego argon2, jest wiele możliwości.

Nieznajomy11
Nieznajomy11 Moderator forum.lvlup.pro

anon39691534:

jest wiele dobrych, wartych uwagi metod hashowania. Przykładowo można zastosować SHA-256 z użyciem soli

Czyli kolejnego rozwiązania, które bardzo tanio można łamać na pierwszym lepszym cpu (setki tysięcy kombinacji na sekundę)? To beznadziejna rada, SHA-256 ma być szybkie, nie do haseł.

Nie ma co się też pakować w takie magiczne rozwiązania, jakieś robione samodzielnie. Mieszanie funkcji hashujących bez wiedzy to norma, bo ludzie myślą, że będzie silniejsze, a nadal używają super szybkich funkcji, często nie uzyskując żadnego usprawnienia metody, a możę nawet ryzykując jej osłabienie.

Bcrypt jest gotowym rozwiązaniem, automatycznie obsługującym solenie haseł i wszystko to poprawnie. Wystarczy dobrać tylko odpowiedni work factor (na ten moment 12 lub wyższy). Weryfikacja hasła będzie trwać jakieś 200ms (przy 12), zależnie od sprzętu. Ataki siłowe stają się nieporównywalnie bardziej kosztowne.

Nie wynajdujmy koła na nowo i nie ryzykujmy bez powodu bezpieczeństwa przechowywania haseł. Podczas gdy wspominany również argon2 nie jest złą opcją, jeśli mamy szybką i bezbolesną możliwość wykorzystania bcrypta, nie widzę w tym żadnego problemu.

system
system

Ten temat został automatycznie zamknięty 32 dni po ostatnim wpisie. Tworzenie nowych odpowiedzi nie jest już możliwe.