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
 
Start new topic
Odpowiedzi
dooshek
post
Post #2





Grupa: Zarejestrowani
Postów: 70
Pomógł: 0
Dołączył: 22.10.2003
Skąd: Trójmiasto

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


Cytat(Speedy @ 2004-12-11 20:29:48)
W moim pomyśle ta opcja odpada ponieważ podajesz skryptowi jakąś frazę, a on ją szyfruje i sprawdza czy zgadza się z zaszyfrowanym wcześniej ciągiem , który jest w jakiejś bazie. md5 da się rozszyfrować, ale ciężko, więc sam zaszyfrowany ciąg takiemu "hackerowi" na niewiele się zda. Jeśli podasz skryptowi ciąg zaszyfrowany, to on go zaszyfruje i sprawdzi , czy "podwójnie zaszyfrowane" hasło zgadza się prawidłowym hashem. Oczywiście nie będzie się zgadzać (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . Problem pojawia się jeżeli zostanie przechwycone niezaszyfrowane hasło. Ale i tak sprawa sniffer'ów dotyczy tylko sieci i tą sprawę należy rozpatrywać inaczej. Jeśli ktoś łączy się z internetem w inny sposób - problem znika (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .

Nie rozumiesz - nic nie musisz "rozszyfrowywac" - wystarczy przechwycic Twoj czy tez md5 snifferem i zapodac do Twojego skryptu ktory bedzie "myslal", ze pochodzi on od uzytkownika... W rzeczywistosci bedzie pochodzil od hackera ktory bez podawania hasla sie dostanie na stronke. Mozesz to szyfrowac i rozszyfrowywac miliony razy - to nic nie da dopoki transmisja nie bedzie bezpieczna.

Co do snifferow i braku problemu podsluchiwania to nie bylbym pewien czy "problem znika" - podejrzewam, ze da sie podsluchac Cie jak uzywasz modemu, neo czy tez innego "dostepu" - pakiety przechodza przez rozne miejsca wiec nie sadze, ze to nie jest problem a jesli rozpatrujesz "bezpieczne" logowanie to Twoje takie nie jest niestety (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

Ten post edytował dooshek 13.12.2004, 18:30:44
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: 26.12.2025 - 18:26