Funkcja Password czy md5 ?

Której funkcji lepiej używać do zabezpieczenia hasła w mysql md5 czy password? Orientuje się tylko, że obie działają w podobny sposób, ale z Password() jeszcze nie korzystałem i nie wiem czy jest bardziej skuteczna czy może przestarzała ?

Rozwijając pytanie.. W takim razie jakiej funkcji użyć lub najlepszej metody do zabezpieczenia panelu administracyjnego (login + hasło) z duża bazą danych klientów. Dodam, że witryna w PHP stoi aktualnie na przestarzałym enginie bez porządnych zabezpieczeń.

Zastanawiałem się nad tym czy istnieje możliwość dodatkowego zabezpieczenia strony tzn. nie tylko login i hasło ale powiedzmy specjalny identyfikator lub plik, który będzie odpowiadał za wywołanie zabezpieczonej strony? Spotkaliście się z takim rozwiązaniem? W dużych portalach np. banki trzeba potwierdzić kodem z sms, jakby to jakoś przerobić i powiedzmy mailowo dostawać specjalny klucz do logowania na konto. I czy takie rozumowanie i rozwiązanie ma wogóle sens i pociąga za sobą dodatkowe zabezpieczenia...?

Przedstawiono wiele ciekawych rozwiązań ale każdy napisał coś od siebie, czy moglibyście na podstawie rankingu określić metodę najlepszą powiedzmy:

  1. sha2
  2. md5 + sól
  3. sha1
  4. ...itd

Pozwoli mi to na jakąś ogólną lepszą ocenę i wdrozenia w swoim projekcie.

2 lata, 3 miesiące temu | edytowane przez: rzientek 435221243

  • Po pierwsze, cała strona powinna być serwowana po https. To zabezpiecza cię przed atakami typu Man-in-the-middle, dużą cześcia XSS i podsłuchiwaniu danych. Procedura logowania oczywiście też musi być po https, żeby nikt poprostu nie podsłuchał sobie hasła.

    To jakiej funkcji hashującej użyjesz do przechowywania hasła, ma jedynie znaczenie w przypadku, gdyby atakujący włamał się do samej bazy i odczytał ten hash. Jest to zdecydowanie mniej częstszy atak, ale warto się też przed nim chronić.

    Kody w mail'u są mało bezpieczne, bo wiadomości e-mail są wysyłane otartym tekstem, więc znów narażasz się na podsłuch.

    Jeśli potrzebujesz tego rodzaju wzmocnienia bezpieczeństwa, istnieją tokeny RSA. Token taki generuję z PIN'u podanego przez użytkownika i czasu ciąg liczb, które należy podać przy logowaniu. Po stronie serwera znajduję się drugi token, zsynchronizowany z tamtym, który robi to samo. Jeśli ciągi się zgadzają to, użytkownik jest zalogowany. System taki często jest stosowany w większych firmach i tanie nie jest.

    Znacznie tańsze i bardzo skuteczne jest ograniczenie dostępu do strony admina tylko do wewnętrznej sieci firmy. Jeśli potrzebny jest dostęp z zewnątrz, najlepiej użyć systemu VPN.

    Tyle na razie pomysłów, metod jest na pewno znacznie więcej.

    PS.

    Na temat MD5 należy jeszcze powiedzieć, że wygenerowanie ciągu znaków o tym samym hashu nie wygama żadnych rainbow-tables i dużej ilości pieniędzy, lecz domowego laptopa i minimalnej wiedzy. Salt pomaga tylko na ataki brute-force (wspomniane rainbow-tables) - NIE pomaga przezwyciężyć matematycznych wad tego algorytmu. Funkcja ta jest poprostu nieskuteczna. Istnieją podejrzenia, iż podobne wady mogą dotyczyć SHA1 (choć jeszcze nie wykazano tego), więc wszystkie organizację związane z bezpieczeństwem zalecają migrację do SHA256.

  • W dzisiejszych czasach md5 nie jest zbyt skutecznym zabezpieczeniem przynajmniej jeśli chodzi o zabezpieczenie hasła, wystarczą pieniądze na kupienie sobie dostępu do dużego rainbowtables i md5 pada, ja osobiście polecam sha-2 lub sha-3 i dłuższe wersje tego algorytmu. Oczywiście warto przeczytać o tym więcej żeby nie spowodować wąskiego gardła w programie przez za długie hasło. SHA nie gwarantuje 100% bezpieczeństwa , bo co w tych czasach gwarantuje skoro algorytmy do szyfrowania i hashowania danych padają jeden po drugim ale jest na pewno bezpieczniejszy od md5. Z password nie korzystałem więc się na jego temat nie wypowiem ale nie jest on chyba zbyt popularny skoro w żadnej dotychczas czytanej przeze mnie literaturze nie wspominali o nim.

  • co do najlepszego zabezpieczenia, to funkcja hashująca pozwala jedynie na bezpieczne przechowywanie haseł w bazie danych. jeśli chcesz zabezpieczyć panel admina, to najlepiej stosować bezpieczne hasła (długie, wiele liter i cyfr, itp.), przetestować go pod kątek sql injection (analogicznie wszelkie inne formularze na stronie), zabezpieczyć przed atakami typu brute force (np. zablokowanie konta po 3 nieudanej próbie, blokowanie ip po kilku nieudanych próbach, dodanie captchy po nieudanych próbach (jak to ma np. google)). no i adres do panelu nie powinien być jakiś oczywisty typu adres-strony.pl/admin. z drugiej strony czytalem kiedys o programistach, ktorzy wystawili na swojej stronie fake'owy panel pod wlasnie takim adresem i logowali wszelkie proby wlamania sie do niego, a nastepnie sprawdzali, czy prawdziwy panel pod innym adresem bylby na te proby odporny i jesli nie, to go po prostu ulepszali

  • najlepsze metoda szyfrowania

    szyfrowanie

    obrazek z http://xkcd.com/153/

  • O ile ja wiem, to: md5() jest funkcją mieszającą password() jest funkcją szyfrującą ponadto, rezultat md5() jest krótszy (mniej znaków) niż rezultat password(). Co do odzyskiwania haseł z md5() to nawet google oferuje taką możliwość; metody "łamania" md5 opierają się głównie o "rainbow tables". Jeśli chodzi o trzymanie haseł w bazie zmieniłem z początkowego md5() na sha1(), żeby ostatecznie przejść na funkcję password() dostarczaną w mysql. Jednak chyba jeszcze większe bezpieczeństwo uzyskalibyśmy korzystając z klasy/rozszerzenia mcrypt dostępnego dla PHP i oferującego dużo więcej możliwości hashowania haseł. Nie należy także zapominać o bezpieczeństwie samej bazy danych, serwera i w ogóle aplikacji.

    Mój werdykt: MD5 NIE JEST BEZPIECZNIEJSZE OD PASSWORD

  • Jak już ci pisano obie metody są przestarzałe. Z dwu podanych przez ciebie md5 jest lepsza. Wszystko zależy od tego co chcesz tym zabiezpieczyć.

  • @tomaszs: jak zastosujesz kilka razy hashowanie, to zwiekszysz tylko podatnosc na kolizje zamiast bezpieczenstwa

  • @tomaszs z tego co kiedyś czytałem, to X hashowanie nie ma żadnego sensu - może co najwyżej pogorszyć sytuację. Ja osobiście korzystam z md5() o Password() wręcz nigdy nie słyszałem ^^

  • Polecam korzystanie z biblioteki która jest w wordpress'ie: http://www.openwall.com/phpass/

  • sha512 z solą (np rand()) i masz znikome szanse, że hasło zostanie złamane ;]

Zaloguj się, aby dodać swoją odpowiedź