Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Bezpieczne logowanie bez SSL, Ciekawa koncepcja :) proszę o ocenę.
aso824
post
Post #1





Grupa: Zarejestrowani
Postów: 46
Pomógł: 1
Dołączył: 2.08.2009

Ostrzeżenie: (0%)
-----


Witam,
Niestety nie znalazłem osobnego działu na tematykę bezpieczeństwa ponad PHP oraz JS, więc umieszczam tutaj - proszę moda o przeniesienie jeżeli widzi lepsze miejsce dla tego tematu.

Zagadnienie: bezpieczne logowanie bez użycia SSL (https)

Szukałem w Googlach bezpiecznego rozwiązania ale padały same dość... nieprzemyślane rozwiązania. Wśród nich znalazłem ynteligentne takie jak:
  • Obliczanie hashu hasła przed wysłaniem - co jest całkowicie bez sensu, bo hacker złapie hash i go prześle = ma dostęp, jedynie nie uzyska źródłowego hasła
  • Własna funkcja szyfrująca - to chyba wiadomo że bez sensu ze względu na to że JS jest client-side
  • Kombinacja aktualnego czasu z hashem - j/w

Po przemyśleniach wpadłem na rozwiązanie.

Fakty:
Jak wiadomo, hacker może za pomocą sniffera przechwycić dane przesyłane w obu kierunkach.
Istnieje również implementacja - i to nie jedna - MD5() dla Javascriptu.
Nie istnieje metoda zabezpieczenia przed atakiem MitM bez użycia HTTPS - poniższe rozwiązanie powinno bronić przed snifferem.

  1. Skrypt trzyma w sesji random string (im dłuższy, tym lepiej, ale rozsądnie) który jest zmieniany przy każdym ponownym załadowaniu formularza lub pomyślnym zalogowaniu
  2. Formularz posiada pole typu hidden z losowym ciągiem z sesji wygenerowanym w pkt. 1
  3. Przed wysłaniem formularza, jest wykonywana u klienta funkcja md5 ( md5(random) + md5(password) ); wynik funkcji jest przesyłany jako hasło
  4. Skrypt porównuje otrzymane dane: md5 ( md5($_SESSION["random"]) + $db->passwordHash ) == $_POST["password"]. Jeżeli wartość z pola hidden =/= wartość z sesji to prośba o ponowne wypełnienie formularza, jeżeli warunek się nie zgadza to błąd logowania.


Wady:
- MD5 jest dość słabym skrótem - przy odpowiednim nakładzie czasu/pieniędzy jest do złamania (może SHA2 w JS?)
- Wymaga Javascriptu po stronie klienta; oczywiście można to wykonać tak, że przy wyłączonym JS to zabezpieczenie nie jest używane
- Atak MitM całkowicie pokonuje to "zabezpieczenie"

Czy takie rozwiązanie da mocną ochronę przed snifferami, czy coś pomyliłem? Co można jeszcze ulepszyć?
Pozdrawiam, aso
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.12.2025 - 00:45