Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Bezpieczne logowanie bez SSL, Ciekawa koncepcja :) proszę o ocenę.
aso824
post 26.06.2013, 21:06:25
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
Emeszenes
post 13.11.2013, 15:43:43
Post #2





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 17.03.2010

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


Wtam,

również wiele razy zastanawiałem się nad tym zagadnieniem
i o ile jeszcze bez SSL'a można przeprowadzić bezpieczne logowanie
(gdy hasło czy jego skrót istnieje już w bazie na serwerze,
swoje rozwiązanie opublikuję, jak wyraźnie ktoś o to poprosi),
ale co z tego, jak treść, do której się zaloguję, można już bez problemu podsłuchać,
o tyle proces rejestracji (czyli przesłanie hasła czy jego skrótu po raz pierwszy) już nie :-(
i dlatego w ostateczności doszedłem do wniosku,
że jedynym sensownym rozwiązaniem jest szyfrowanie kluczem publicznym,
ale że do tej pory nie znalazłem darmowego rozwiązania tego zagadnienia,
to dałem sobie spokój. Zadowalającym dla mnie wyjściem z sytuacji
był zakup hostingu w firmie vipserv.org.
Rewelacja ! W celu uruchomienia SSL'a nie trzeba dopłacać za własne IP !
Poza tym można zainstalować sobie własny i darmowy certyfikat SSL,
który nie generuje ostrzeżeń o niezaufanym połączeniu,
polecam: www.startssl.com a tutaj przykładowe tutoriale:
http://www.ulos.pl/darmowe-certyfikaty-ssl...startssl,2.html
http://yuppy.pl/2011/05/darmowy-certyfikat...-twojej-strony/

Pozdrawiam - Emeszenes

Ten post edytował Emeszenes 13.11.2013, 16:04:43
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2025 - 08:15