Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> logowanie nie do złamania ;-)
michalkkk
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 13.10.2004

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


Witam. Ostatanio zastanawiam sie nad stworzeniem bezpiecznego formularza logowania(bez wykorzystania ssl poniewaz trzeba kupowac certyfikaty aby nie pojawiały sie ostrzeżenia przegladarek). Pomimo tytułu uważam że skrypt jest do zlamania(tak myśle, nie próbowałem), ale chciałem poznać Wasze rady, wskazówki. Może z Waszą pomocą uda mi(nam) się napisać w miarę bezpieczny formularz logowania-taki szablon ktory bedzie kazdy mogl zastosowac u siebie. Starałem się wykorzystac Wasze wskazówki, które pisaliście w innych postach. Wykorzystałem chyba troche rzadko stosowana metode z szyfrowaniem(md5-http://pajhome.org.uk/crypt/md5) niektorych przesyłanych danych w javascript po stronie klienta. Cały czas myśle co by mozna jeszcze udoskonalić, także licze na Waszą pomoc. Z góry dzięki.

Chce jak najbardziej utrudnić możliwość zalogowania przez podsłuchanie danych(brak ssl), dlatego szyfruje ip,referer,idsesji. Moze np. odczytac za pomoca JavaScript(aby nie przesyłać danych z serwera do klienta) wersje przegladarki, zaszyfrowac md5(w js) a potem odczytac za pomoca php(ale chyba przy odczycie wersji przez php tez jest przesyłana informacja) i porównac. Nie znam sie za bardzo na tym, ale czy mozna zasymulowac lub podstawić id sesji aby oszukac skrypt? Ip,referer chyba tak.

Sciezka do pliku powinna byc taka jak wpisana w poniższym pliku(oczywiscie trzeba wpisac wlasny adres)-http://jakasstrona.pl/log.php

  1. <?
  2. $ip=gethostbyaddr(getenv (&#092;"REMOTE_ADDR\"));
  3. $ref=$_SERVER['HTTP_REFERER'];
  4. $ua=$_SERVER['HTTP_USER_AGENT'];
  5.  
  6. $zak_ip=md5($ip);
  7. $zak_ref=md5($ref);
  8. $zak_ua=md5($ua);
  9.  
  10. session_register(&#092;"ses_losowa\");
  11. session_register(&#092;"nie_zmieniaj_losowej\");
  12.  
  13.  
  14. if ($_SESSION['nie_zmieniaj_losowej']!='tak')
  15. {
  16. $losowa=mt_rand(); //losuje kilkucyfrowa liczbe
  17. $_SESSION['ses_losowa']=$losowa;
  18. }
  19.  
  20. $_SESSION['nie_zmieniaj_losowej']='tak';
  21.  
  22.  
  23. //po kliknieciu w przycisk Loguj nastepuje
  24. //wywolanie funkcji w javascript md5 - po stronie uzytkownika,
  25. //która zestepuje wpisane przez uzytkownika haslo w zakodowany md5 ciag znaków
  26. //do hasla przed zakodowaniem w javascript dodawane sa dodatkowe zmienne
  27. //i to wszystko razem jest kodowane md5(w javascript) i wysylane do serwera
  28. //niezaszyfrowane haslo nie jest wysyłane
  29.  
  30. ?>
  31. <script src=\"md5.js\" type=\"text/javascript\"></script>
  32.  
  33. <FORM METHOD=POST>
  34. Login: <input type=\"text\" name=\"login\" value=\"\">
  35. Haslo: <input type=\"text\" name=\"_haslo\" value=\"\">
  36. <input type=\"hidden\" name=\"se\" value=\"<?echo session_id();?>\">
  37. <input type=\"hidden\" name=\"haslo\" value=\"\">
  38. <input type=\"submit\" value=\"LOGUJ\" onclick=\"haslo.value = hex_md5(_haslo.value+'<?echo $zak_ip.$zak_ref.$_SESSION['ses_losowa'].$zak_ua?>'); _haslo.value = ''\">
  39. </FORM>
  40.  
  41. <?
  42. //////poprawny login i haslo(normalnie bedzie odczytywane z bazy danych)
  43. $poprawny_login='michal';
  44. $poprawne_haslo='test123';
  45. //////poprawny login i haslo(normalnie bedzie odczytywane z bazy danych)
  46.  
  47. /////sprawdzanie czy poprawne dane
  48. if ($_POST['login'] || $_POST['haslo'])
  49. {
  50. $kod_poprawny=md5($poprawne_haslo.md5($ip).md5($ref).$_SESSION['ses_losowa'].md5($ua));
  51.  
  52.  
  53.  if ($_POST['haslo']==$kod_poprawny && $_SERVER[&#092;"HTTP_REFERER\"]=='http://jakasstrona.pl/log.php' && $_POST['se']==session_id())
  54.  {
  55.  echo 'Zostales zalogowany!';
  56.  }
  57.  else
  58.  {
  59.  echo 'Niepoprawne dane';
  60.  exit;
  61.  }
  62. }
  63. /////sprawdzanie czy poprawne dane
  64. ?>
Go to the top of the page
+Quote Post

Posty w temacie
- michalkkk   logowanie nie do złamania ;-)   8.12.2004, 22:16:27
- - Speedy   Wg mnie hasła, niezależnie od tego czy znajdują si...   11.12.2004, 16:18:03
- - bregovic   Generalnie haszowanie hasła przed wysłaniem go dna...   11.12.2004, 17:09:28
- - Speedy   Wystarczy nieco przerobić ten skrypt i można w ogó...   11.12.2004, 18:32:19
- - dooshek   Cytat(bregovic @ 2004-12-11 18:09:28)Generaln...   11.12.2004, 18:52:40
- - Speedy   Cytat(dooshek @ 2004-12-11 17:52:40)Cytat(bre...   11.12.2004, 19:29:48
- - bregovic   Szyfrowanie po stronie przeglądarki jest potrzebne...   11.12.2004, 21:33:38
- - michalkkk   Dziekuje za Wasze wskazówki, jeszcze troche postar...   11.12.2004, 22:09:32
- - hawk   Tak sobie czytam i zastanawiam się, co rozumiecie ...   11.12.2004, 22:58:37
- - Imperior   @hawk: No cóż... tutaj jest przedstawiony sposób n...   12.12.2004, 10:31:17
- - Jabol   A pozatym co za problem, jeżeli przechwyce hasło z...   12.12.2004, 15:09:05
- - hawk   @Imperior: bezpieczeństwo logowania samo w sobie j...   12.12.2004, 17:05:32
- - Imperior   @hawk: Doskonale zdaję sobie z tego sprawę. Dręczy...   12.12.2004, 20:28:26
- - hawk   BTW, SSL != bezpieczeństwo sesji. Użycie SSL n...   13.12.2004, 09:24:57
- - Imperior   Rzecz jasna, że SSL nie załatwia sprawy, ale chyba...   13.12.2004, 17:30:49
- - dooshek   Cytat(Speedy @ 2004-12-11 20:29:48)W moim pom...   13.12.2004, 18:29:31
- - Jabol   @hawk: tak, mówię o zwykłym man-in-the-middle dla ...   13.12.2004, 20:34:44
- - hawk   @Jabol: AFAIK problem z man-in-the-middle był taki...   14.12.2004, 09:12:24
- - Imperior   Cytat(hawk @ 2004-12-14 08:12:24)Podobno w Es...   14.12.2004, 10:09:24


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: 21.12.2025 - 11:53