Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Wlasny ssl
squid
post 5.12.2003, 17:12:36
Post #1





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 3.07.2003
Skąd: Szczecin->niebuszewo->*(next to window)

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


Witam!
w obliczu pewnego problemu (braku SSL) na darmowych serwerach wartoby pomyslec nad obejsciem tego problemu.

Otoz mznaby za pomoca javascriptu generowac zhaszowany (md5) ciag zawierajacy login haslo itd. i porownywac go na serwerze z tam zhaszowanym. Tyleko jak do haszowania doda sie czas (dla wikszego bezpieczenstwa) to taki pakiet informacji musialby docierac do serwera natychmiast, wiec mazna to z kolei obejsc poprzez wygenerowanie na serwerze kilku(nastu) md5 i kilejno je porownujemy z tym co przegladarka wslala do serwera. Ale to tez daje wznoosc na kilka sekund i w dodatu obarcza serwer obliczeniami.

plik index.php:
[php:1:10ee9802fc]<?php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Logowanie</title>
<script type="text/javascript" src="login.js"></script>
<script type="text/javascript">
var czas=<?php print(time()."rn")?>
setInterval('czas++',1000)
</script>
</head>
<body>
<form onsubmit="return send(this.login.value, this.pwd.value, czas, 'frm')">
Login: <input type="text" name="login"><br>
Hasło: <input type="password" name="pwd"><br>
<input type="submit" value="Zaloguj">
</form>
<form action="login.php" method="post" name="frm">
<input type="hidden" name="s">
</form>
</body>
</html>
?>[/php:1:10ee9802fc]

plik login.php
[php:1:10ee9802fc]<?php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Logowanie</title>
</head>
<body>
<?php
// definiujemy poprawny login i hasło
$login='test';
$haslo='xyz123';

// pobieramy aktualny znacznik czasu
$czas=time();

// wykonujemy pętlę sprawdzającą poprawność przesłanej sumy MD5
for($i=0; $i<15; $i++){
if(md5($login.$haslo.($czas-$i)) == $_POST['s']){
print("Podany login i hasło są poprawne !");break;
}
}

// jeżeli przesłana suma MD5 jest niepoprawna, wyświetlamy stosowną informację
if($i==15)print("Brak autoryzacji !<br><a href='java script:history.go(-1)'>Spróbuj jeszcze raz</a>");
?>
</body>
</html>
?>[/php:1:10ee9802fc]

plik login.js
Kod
// SecureLogin 1.1 by Michal Grzechowiak (C) 2003

function y(n){var s='',h='0123456789abcdef',i=0

for(i;i<4;)s+=h.charAt((n>>(i*8+4))&15)+h.charAt((n>>(i++*8))&15);return s}

function k(s){var l=s.length,n=((l+8)>>6)+1,b=[],i=0

  for(i;i<n*16;)b[i++]=0;for(i=0;i<l;i++)b[i>>2]|=s.charCodeAt(i)<<((i%4)*8)

  b[i>>2]|=128<<((i%4)*8);b[n*16-2]=l*8;return b}

function u(x,y){var l=(x&0xFFFF)+(y&0xFFFF),m=(x>>16)+(y>>16)+(l>>16);return (m<<16)|(l&0xFFFF)}

function r(n,c){return (n<<c)|(n>>>(32-c))}

function m(q,a,b,x,s,t){return u(r(u(u(a,q),u(x,t)),s),b)}

function f(a,b,c,d,x,s,t){return m((b&c)|((~b)&d),a,b,x,s,t)}

function g(a,b,c,d,x,s,t){return m((b&d)|(c&(~d)),a,b,x,s,t)}

function h(a,b,c,d,x,s,t){return m(b^c^d,a,b,x,s,t)}

function i(a,b,c,d,x,s,t){return m(c^(b|(~d)),a,b,x,s,t)}

function md5(s){

var x=k(s),a=1732584193,b=-271733879,c=-1732584194,d=271733878,j,o

for(j=0;j<x.length;j+=16){

  o=[a,b,c,d]

  a=f(a,b,c,d,x[j+0],7,-680876936)

  d=f(d,a,b,c,x[j+1],12,-389564586)

  c=f(c,d,a,b,x[j+2],17,606105819)

  b=f(b,c,d,a,x[j+3],22,-1044525330)

  a=f(a,b,c,d,x[j+4],7,-176418897)

  d=f(d,a,b,c,x[j+5],12,1200080426)

  c=f(c,d,a,b,x[j+6],17,-1473231341)

  b=f(b,c,d,a,x[j+7],22,-45705983)

  a=f(a,b,c,d,x[j+8],7,1770035416)

  d=f(d,a,b,c,x[j+9],12,-1958414417)

  c=f(c,d,a,b,x[j+10],17,-42063)

  b=f(b,c,d,a,x[j+11],22,-1990404162)

  a=f(a,b,c,d,x[j+12],7,1804603682)

  d=f(d,a,b,c,x[j+13],12,-40341101)

  c=f(c,d,a,b,x[j+14],17,-1502002290)

  b=f(b,c,d,a,x[j+15],22,1236535329)

  a=g(a,b,c,d,x[j+1],5,-165796510)

  d=g(d,a,b,c,x[j+6],9,-1069501632)

  c=g(c,d,a,b,x[j+11],14,643717713)

  b=g(b,c,d,a,x[j+0],20,-373897302)

  a=g(a,b,c,d,x[j+5],5,-701558691)

  d=g(d,a,b,c,x[j+10],9,38016083)

  c=g(c,d,a,b,x[j+15],14,-660478335)

  b=g(b,c,d,a,x[j+4],20,-405537848)

  a=g(a,b,c,d,x[j+9],5,568446438)

  d=g(d,a,b,c,x[j+14],9,-1019803690)

  c=g(c,d,a,b,x[j+3],14,-187363961)

  b=g(b,c,d,a,x[j+8],20,1163531501)

  a=g(a,b,c,d,x[j+13],5,-1444681467)

  d=g(d,a,b,c,x[j+2],9,-51403784)

  c=g(c,d,a,b,x[j+7],14,1735328473)

  b=g(b,c,d,a,x[j+12],20,-1926607734)

  a=h(a,b,c,d,x[j+5],4,-378558)

  d=h(d,a,b,c,x[j+8],11,-2022574463)

  c=h(c,d,a,b,x[j+11],16,1839030562)

  b=h(b,c,d,a,x[j+14],23,-35309556)

  a=h(a,b,c,d,x[j+1],4,-1530992060)

  d=h(d,a,b,c,x[j+4],11,1272893353)

  c=h(c,d,a,b,x[j+7],16,-155497632)

  b=h(b,c,d,a,x[j+10],23,-1094730640)

  a=h(a,b,c,d,x[j+13],4,681279174)

  d=h(d,a,b,c,x[j+0],11,-358537222)

  c=h(c,d,a,b,x[j+3],16,-722521979)

  b=h(b,c,d,a,x[j+6],23,76029189)

  a=h(a,b,c,d,x[j+9],4,-640364487)

  d=h(d,a,b,c,x[j+12],11,-421815835)

  c=h(c,d,a,b,x[j+15],16,530742520)

  b=h(b,c,d,a,x[j+2],23,-995338651)

  a=i(a,b,c,d,x[j+0],6,-198630844)

  d=i(d,a,b,c,x[j+7],10,1126891415)

  c=i(c,d,a,b,x[j+14],15,-1416354905)

  b=i(b,c,d,a,x[j+5],21,-57434055)

  a=i(a,b,c,d,x[j+12],6,1700485571)

  d=i(d,a,b,c,x[j+3],10,-1894986606)

  c=i(c,d,a,b,x[j+10],15,-1051523)

  b=i(b,c,d,a,x[j+1],21,-2054922799)

  a=i(a,b,c,d,x[j+8],6,1873313359)

  d=i(d,a,b,c,x[j+15],10,-30611744)

  c=i(c,d,a,b,x[j+6],15,-1560198380)

  b=i(b,c,d,a,x[j+13],21,1309151649)

  a=i(a,b,c,d,x[j+4],6,-145523070)

  d=i(d,a,b,c,x[j+11],10,-1120210379)

  c=i(c,d,a,b,x[j+2],15,718787259)

  b=i(b,c,d,a,x[j+9],21,-343485551)

  a=u(a,o[0]);b=u(b,o[1]);c=u(c,o[2]);d=u(d,o[3])}return y(a)+y(b)+y(c)+y(d)}

function send(q,w,x,v){with(document.forms[v])s.value=md5(q+w+x),submit();return!1}


Moje pytanie czy jest jakis sposob by ominac te niedogodnosc generowania wielu md5 na serwerze


--------------------
Jeśli życie to kara to nieźle nabroiłem ;-)
Go to the top of the page
+Quote Post
adwol
post 5.12.2003, 19:52:36
Post #2





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 6.08.2003

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


http://forum.php.pl/viewtopic.php?p=48068#48068
Może to Cię zadowoli.
Go to the top of the page
+Quote Post
squid
post 5.12.2003, 21:05:35
Post #3





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 3.07.2003
Skąd: Szczecin->niebuszewo->*(next to window)

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


calkiem ciekawe, dziekuje, narazie mi to wystarczy ale gdyby ktos mial inne pomysly to czekam na sugeste:)


--------------------
Jeśli życie to kara to nieźle nabroiłem ;-)
Go to the top of the page
+Quote Post
pat_
post 3.01.2004, 22:58:34
Post #4





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 31.12.2003

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


Nie wiem czy rozumiem, ale gdybyś do zakodowanej informacji nie dodawał czasu z sekundami, to chyba "natychmiast" może trwac i 10 sek.

pozdrawiam Pat
Go to the top of the page
+Quote Post
squid
post 8.01.2004, 22:18:41
Post #5





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 3.07.2003
Skąd: Szczecin->niebuszewo->*(next to window)

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


jesli zrezygnuje z dodawania czasu to spadnie bezpieczenstwo tego rozwiazania


--------------------
Jeśli życie to kara to nieźle nabroiłem ;-)
Go to the top of the page
+Quote Post
enceladus
post 8.01.2004, 22:38:26
Post #6





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 19.11.2003
Skąd: Poznań

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


Nie wiem czy ktoś to proponował, ale co myślicie o takim scenariuszu:
1. W sesji tworzony jest unikalna zmienna, która która występuje w formularzu jako hidden nazwijmy ją podobnie jak w przykładzie SEED
2. Przy submicie liczone:
MD5(SEED+MD5(haslo)) i to jest wysyłane jako hasło
3. Serwer przechowuje w bazie hasła 'pociągnięte' MD5 - administrator nie widzi jawnych haseł - po to jest te wewnętrzne MD5 i serwer porównuje MD5(SEED+hasło w bazie) z tym co przyszło z przeglądarki
4. Jeśli jest OK autoryzacja idzie dalej - warto też zmienić wtedy identyfikator sesji.

TO tak na szybko.

Spełnia to podstawowe warunki:
1. hasło na serwerze nie jest jawne
2. przesyłane hasło nie jest jawne
3. Nie da się podsłuchać transmisji HTTP i wygenerować stronę z podsłuchanym SEED-em, jest on unikalny bo generuje go serwer a nie przeglądarka - taką wadę ma podawany przykład.

Jeśli gdzieś popełniam błąd poprawcie mnie.


--------------------
Enceladus
Warsztat: bez warsztatu
Aktua
Go to the top of the page
+Quote Post
squid
post 8.01.2004, 22:45:51
Post #7





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 3.07.2003
Skąd: Szczecin->niebuszewo->*(next to window)

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


na pierwszy rzut oka pomysl niezly ale mam jedno 'ale', zmienna seed z pola hidden trzeba wyslac do przegladarki, mozna to podsluchac, jaki jest wiec sens jej wykozystania?


--------------------
Jeśli życie to kara to nieźle nabroiłem ;-)
Go to the top of the page
+Quote Post
enceladus
post 8.01.2004, 23:07:33
Post #8





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 19.11.2003
Skąd: Poznań

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


Cytat
na pierwszy rzut oka pomysl niezly ale mam jedno 'ale', zmienna seed z pola hidden trzeba wyslac do przegladarki,  mozna to podsluchac, jaki jest wiec sens jej wykozystania?


Taki że generuje ją serwer a nie przeglądarka i za każdym razem jest inna (jest unikalna per sesja). Dzięki temu odpada scenariusz gdy atakujący "podsłucha" dane wysyłane podczas SUBMITA formularza, a potem sam zrobi dokładnie taki sam SUBMIT. Gdy SEED generowany jest po stronie przeglądarki mamy 'kupę' koleś wejdzie. Natomiast gdy SEED był z serwera, nawet gdy gość wyśle takie same dane SEED nie będzie poprawny - serwer go nie zaloguje.


--------------------
Enceladus
Warsztat: bez warsztatu
Aktua
Go to the top of the page
+Quote Post
adwol
post 8.01.2004, 23:36:23
Post #9





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 6.08.2003

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


Cytat
1. hasło na serwerze nie jest jawne

Ale to nic nie zmienia. Po prostu teraz żeby się zalogować nie trzeba znać hasła tylko jego skrót MD5, a do takowego ma administrator już dostęp. Jeśli to hasło chroni tylko ten serwis, to nie ma różnicy. Ewentualny pożytek jest wtedy gdy z tej samej bazy haseł autoryzują się inne usługi.
Cytat
3. Nie da się podsłuchać transmisji HTTP i  wygenerować stronę z podsłuchanym SEED-em, jest on unikalny bo generuje go serwer a nie przeglądarka - taką wadę ma podawany przykład.

Który przykład? Mój? (Bo nie widzę tu nigdzie indziej zmiennej o tej nazwie.) W moim również seed był generowany po stronie serwera. Generowanie go po stronie przeglądarki nic nie daje.
Go to the top of the page
+Quote Post
enceladus
post 8.01.2004, 23:50:10
Post #10





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 19.11.2003
Skąd: Poznań

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


Cytat
Cytat
1. hasło na serwerze nie jest jawne

Ale to nic nie zmienia. Po prostu teraz żeby się zalogować nie trzeba znać hasła tylko jego skrót MD5, a do takowego ma administrator już dostęp. Jeśli to hasło chroni tylko ten serwis, to nie ma różnicy. Ewentualny pożytek jest wtedy gdy z tej samej bazy haseł autoryzują się inne usługi.

Zmienia i to dużo - kłania się ludzkie lenistwo - ludzie zwykle mają takie samo hasło do kilku usług - jeśli w bazie zapisane są jawnie może się okazać, że nieuczciwy admin ma dostęp do zupełnie innych usług osób które ma w bazie.
Przy okazji podważyłeś np. szyfrowanie haseł w systemie operacyjnym smile.gif daj przykład usera, który ucieszy się gdy się dowie, że jego hasło na unixie jest jawnie zapisane w pliku shadow (tylko admin ma do niego dostęp)
Cytat
Który przykład? Mój? (Bo nie widzę tu nigdzie indziej zmiennej o tej nazwie.) W moim również seed był generowany po stronie serwera. Generowanie go po stronie przeglądarki nic nie daje.


Nie wskazałem - ten podany linkiem (Twój) - Squid chyba wiedział o co chodzi.
Nic nie dało że generowałeś go na serwerze - logicznie to był jak generowany po stronie przeglądarki - do porównania było brane to co przyszło z przeglądarki $_POST['seed'] czy każdy mógł to podmienić.


--------------------
Enceladus
Warsztat: bez warsztatu
Aktua
Go to the top of the page
+Quote Post
adwol
post 9.01.2004, 00:08:21
Post #11





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 6.08.2003

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


Cytat
Zmienia i to dużo - kłania się ludzkie lenistwo - ludzie zwykle mają takie samo hasło do kilku usług - jeśli w bazie zapisane są jawnie może się okazać, że nieuczciwy admin ma dostęp do zupełnie innych usług osób które ma w bazie.

Czytaj dokładnie to co napisałem.
Cytat
Jeśli to hasło chroni tylko ten serwis, to nie ma różnicy

Jeśli ktoś używa w kilku miejscach tego samego hasła to ten warunek z mojego zdania nie zachodzi.
Cytat
Przy okazji podważyłeś np. szyfrowanie haseł w systemie operacyjnym smile.gif daj przykład usera, który ucieszy się gdy się dowie, że jego hasło na unixie jest jawnie zapisane w pliku shadow (tylko admin ma do niego dostęp)

Nie podważyłem. Nadinterpretowywujesz moje stwierdzenia. Poza tym większość uzytkowników nie ma pojęcia co daje hasło zapisane jawnym tekstem, a co zaszyfrowane/zakodowane. Będą powtarzać, że szyfrowane jest lepsze bo takie zdanie ma ich kolega który jest lokalnym znawcą tematu albo przeczytali to na jakimś forum, a sami nie bedą w stanie podać konkretnego przypadku w którym takowy format haseł ma przewagę.
Cytat
Nie wskazałem - ten podany linkiem - Squid chyba wiedział o co chodzi.

Jest to mój przykład i nie widzę na jakiej podstawie twierdzisz, że generuje on seed po stronie przeglądarki.
Go to the top of the page
+Quote Post
enceladus
post 9.01.2004, 00:09:18
Post #12





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 19.11.2003
Skąd: Poznań

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


Cytat
Cytat
Zmienia i to dużo - kłania się ludzkie lenistwo - ludzie zwykle mają takie samo hasło do kilku usług - jeśli w bazie zapisane są jawnie może się okazać, że nieuczciwy admin ma dostęp do zupełnie innych usług osób które ma w bazie.

Czytaj dokładnie to co napisałem.
Cytat
Jeśli to hasło chroni tylko ten serwis, to nie ma różnicy

Jeśli ktoś używa w kilku miejscach tego samego hasła to ten warunek z mojego zdania nie zachodzi.
Cytat
Przy okazji podważyłeś np. szyfrowanie haseł w systemie operacyjnym smile.gif daj przykład usera, który ucieszy się gdy się dowie, że jego hasło na unixie jest jawnie zapisane w pliku shadow (tylko admin ma do niego dostęp)

Nie podważyłem. Nadinterpretowywujesz moje stwierdzenia. Poza tym większość uzytkowników nie ma pojęcia co daje hasło zapisane jawnym tekstem, a co zaszyfrowane/zakodowane. Będą powtarzać, że szyfrowane jest lepsze bo takie zdanie ma ich kolega który jest lokalnym znawcą tematu albo przeczytali to na jakimś forum, a sami nie bedą w stanie podać konkretnego przypadku w którym takowy format haseł ma przewagę.
Cytat
Nie wskazałem - ten podany linkiem - Squid chyba wiedział o co chodzi.

Jest to mój przykład i nie widzę na jakiej podstawie twierdzisz, że generuje on seed po stronie przeglądarki.


Poprawiłe post-a ... ponadto ja wychodze z zalozenia ze jesli mogę coś zrobić dobrze to tak to robię - bardziej zabezpieczam dane userów. NIGDY nie zakładam że szaraczek ma pojęcie o bezpieczeństwie.


--------------------
Enceladus
Warsztat: bez warsztatu
Aktua
Go to the top of the page
+Quote Post
enceladus
post 9.01.2004, 00:27:17
Post #13





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 19.11.2003
Skąd: Poznań

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


Cytat
Jest to mój przykład i nie widzę na jakiej podstawie twierdzisz, że generuje on seed po stronie przeglądarki.


Poniżej przykład 'ataku' na Twoją metodę:

Dane wejściwe
- hasło: 1234

Metoda:
1. Wyświetla się strona logowania SEED równy jest np: f96b697d7cb7938d525a2f31aaf161d0
2. Człowiek wprowadza hasło i robi submit liczone jest nowe hasło:
MD5('1234f96b697d7cb7938d525a2f31aaf161d0') = '956009f105178ce233584bf15b152523'
3. Do przeglądarki wysyłane jest w post:
$_POST['haslo']='956009f105178ce233584bf15b152523'
$_POST['seed']='f96b697d7cb7938d525a2f31aaf161d0'
---- Ta transmisja zostaje przechwycona -----
4. User skutecznie loguje się zgodnie z procedurą:
[php:1:d6fb6645a6]<?php
if (md5($haslo_wyciagniete_z_bazy . $_POST['seed']) == $_POST['haslo']) {
# hasło poprawne
} else {
# haslo błędne
}

?>[/php:1:d6fb6645a6]
5. Atakujący przerabia stronę logowania, wstawia na stałe wartości które przechwycił
6. Robi submit
7. BINGO - jest zalogowany


--------------------
Enceladus
Warsztat: bez warsztatu
Aktua
Go to the top of the page
+Quote Post
adwol
post 9.01.2004, 00:43:08
Post #14





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 6.08.2003

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


Przyjrzałem się teraz temu kodowi i faktycznie nie ma w nim sprawdzania poprawności seeda. Gdzie mi to zginęło? -- nie wiem.

W każdym bądź razie dzięki za zauważenie. Nie oglądałem tego mojego przykładu podczas dyskusji z Tobą, tylko pamiętałem samą metodę i myślałem, że masz do niej uwagi. Niestety była rozbieżność między algorytmem a implementacją. winksmiley.jpg

Oryginalny mój post poprawiłem, aby inni kopiując go jeden do jeden nie wpadli w pułapkę.
Go to the top of the page
+Quote Post
enceladus
post 9.01.2004, 00:57:24
Post #15





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 19.11.2003
Skąd: Poznań

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


Cytat
Przyjrzałem się teraz temu kodowi i faktycznie nie ma w nim sprawdzania poprawności seeda. Gdzie mi to zginęło? -- nie wiem.

W każdym bądź razie dzięki za zauważenie. Nie oglądałem tego mojego przykładu podczas dyskusji z Tobą, tylko pamiętałem samą metodę i myślałem, że masz do niej uwagi. Niestety była rozbieżność między algorytmem a implementacją. winksmiley.jpg

Oryginalny mój post poprawiłem, aby inni kopiując go jeden do jeden nie wpadli w pułapkę.

Spoko smile.gif
Inna sprawa, że te metody i tak są podatne na atak Man In The Middle.
Wystarczy że ktoś sprytny i zdesperowany podszyje się pod nasz serwer, zrobi identyczną stronę logowania, ale taką która w JS-ie nie czyści pola formularza z właściwym hasłem i odbierze taką transmisję będzie miał czyste hasło. Wniosek jest taki - nie ma bezpiecznych metod - są tylko metody ograniczania ryzyka smile.gif Dobrą metodą ograniczenia ryzyka jest stosowanie SSL-a - inna sprawa, że któraś z wersji MS IE była podatna na SSL-owy ataka typu MIM smile.gif


--------------------
Enceladus
Warsztat: bez warsztatu
Aktua
Go to the top of the page
+Quote Post
a1internet
post 11.01.2004, 23:00:37
Post #16





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 11.01.2004
Skąd: Gdynia

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


Cytat
5. Atakujący przerabia stronę logowania, wstawia na stałe wartości które przechwycił
6. Robi submit
7. BINGO - jest zalogowany


Warto generować MD5 nie tylko w oparciu o hasło, ale i adres IP klienta oraz oryginalny adres IP jeśli klient korzysta z proxy. Wówczas zdobyte, zakodowane dane będą mogły być wykorzystane tylko przez osobę z dokładnie takim samym adresem IP.


--------------------
Michał Jaskólski
A1 Internet // inżynierowie infostrady // http://www.a1.pl
:: płatne wsparcie techniczne dla PHP, MySQL i Apache
Go to the top of the page
+Quote Post
squid
post 11.01.2004, 23:16:00
Post #17





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 3.07.2003
Skąd: Szczecin->niebuszewo->*(next to window)

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


pod warunkiem ze ip sie nie zmieni czyli mowimy tu o przypadku kiedy kijent zalatwia wszystko w jednej sesji


--------------------
Jeśli życie to kara to nieźle nabroiłem ;-)
Go to the top of the page
+Quote Post
enceladus
post 11.01.2004, 23:24:38
Post #18





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 19.11.2003
Skąd: Poznań

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


Cytat
Warto generować MD5 nie tylko w oparciu o hasło, ale i adres IP klienta oraz oryginalny adres IP jeśli klient korzysta z proxy. Wówczas zdobyte, zakodowane dane będą mogły być wykorzystane tylko przez osobę z dokładnie takim samym adresem IP.

Które MD5 - bo nie bardzo rozumiem questionmark.gif?
Adres IP jest jednoznaczny, atakujący może przeprowadzić analizę takiego algorytmu i opracowac atak na ten algorytm. Wszędzie gdzie mowa o szyfrowaniu, zawsze _NAJWAŻNIEJSZE_ są liczby losowe, na nich oparte są te algorytmy. Nie da się opierać algorytmów mających zapewniać bezpieczeństwo na danych które można przewidzieć, to niszczy algorytm u samych podstaw.


--------------------
Enceladus
Warsztat: bez warsztatu
Aktua
Go to the top of the page
+Quote Post
a1internet
post 12.01.2004, 02:38:06
Post #19





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 11.01.2004
Skąd: Gdynia

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


Cytat
pod warunkiem ze ip sie nie zmieni czyli mowimy tu o przypadku kiedy kijent zalatwia wszystko w jednej sesji


No tak, w przypadku zmiany IP nie zgadzałyby się dane zakodowane MD5 i użytkownik musiałby zalogować się ponownie.


--------------------
Michał Jaskólski
A1 Internet // inżynierowie infostrady // http://www.a1.pl
:: płatne wsparcie techniczne dla PHP, MySQL i Apache
Go to the top of the page
+Quote Post
Bora
post 12.01.2004, 02:51:04
Post #20





Grupa: Zarejestrowani
Postów: 270
Pomógł: 0
Dołączył: 15.06.2003

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


Ja chcąc zebezpieczyć kod wziąłem sie za sesje.

ID sesji zawiera 2 zmienne id i klucz.
Gdzis na forum było o tym ale niestety nie mogłem znależć.
Każde wejście powoduje wygenerowanie kolejnego klucza.
Wejście z błędnym kluczem niszczy sesje i tworzy nową.
Utrudnia to przejęcie sesji.


[php:1:e935c83e2d]<?php
class session
{
var $sesid;
var $klucz;
var $new_klucz;

function read( $id )
{
$key=$this->decode($id);
if($key==false){
//echo"newkey";
$id=$this->new_sid();
$this->sesid=$id;
$new_id=$this->code($id,$this->gen_klucz());
session_id($new_id);
$key=$this->decode(session_id());
}else{
$this->sesid=$key['0'];
}
$this->klucz=$key['1'];
$this->new_klucz=$this->gen_klucz();
$new_id=$this->code($this->sesid,$this->new_klucz);
session_id($new_id);
$query="SELECT * FROM " . $this->db['ss_table'] . " WHERE " . $this->db['id_field'] . " = '" . $this->sesid . "' AND " . $this->db['ex_field'] . " > '" . time() . "' AND ".$this->db['token_table']."='".$this->klucz."'";
$query = mysql_query($query);
if ( mysql_num_rows( $query ) > 0 )
{
$info = mysql_fetch_assoc( $query );
return( $info['DATA'] );
}
else
{
$query="SELECT * FROM " . $this->db['ss_table'] . " WHERE " . $this->db['id_field'] . " = '" . $this->sesid . "'";
$query = mysql_query($query);
if ( mysql_num_rows( $query ) > 0 )

{
$id=$this->new_sid();
$key=$this->gen_klucz();
$new_id=$this->code($id,$key);
session_id($new_id);
$this->sesid=$id;
$this->new_klucz=$key;
}
return( false );
}
}

function new_sid()
{
$_sid = substr(md5(uniqid(rand(), true)), 0, 32);
return( $_sid );
}
function decode($kod)
{
if (ereg('/^([a-zA-Z0-9]*)$/i', $kod)){
return false;
}
$odk = base64_decode($kod);
$odkodowany=explode("|",$odk);
if(count($odkodowany)!=2){
return false;
}
return $odkodowany;
}

function code($sesid,$klucz)
{
$key[0]=$sesid;
$key[1]=$klucz;
if(!isset($key[0]) && !isset($key[1])){
return false;
}
$zakod=implode("|",$key);
$zakodowany=base64_encode($zakod);
return $zakodowany;
}
function gen_klucz()
{
$klucz = substr(md5(uniqid(rand(), true)), 5, 5);
return $klucz;
}
}
?>[/php:1:e935c83e2d]

To jest niepełny kod reszta wyglada jak zwykła obsługa sesji przez mysql.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 22.05.2024 - 04:14