Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wlasny ssl
squid
post
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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
a1internet
post
Post #2





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

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


Cytat
Które MD5 - bo nie bardzo rozumiem (IMG:http://forum.php.pl/style_emoticons/default/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.


Wątek dotyczył tego, jak dokonać autoryzacji po HTTP bez SSL nie przesyłając hasła przy każdym logowaniu.

Można tego dokonać w następujący sposób:
[list]
[*]skrypt wypluwa formularz, w którym znajduje się pole na wpisanie loginu, hasła, a w polu typu hidden umieszcza adres IP użytkownika (z poprawką na firewall/proxy)
[*]klient wpisuje login oraz hasło i wysyła formularz
[*]uaktywnia się kod javascript w przeglądarce użytkownika, który generuje ciąg znaków w oparciu o hasło i adres IP używając MD5 i przesyła na serwer ów ciąg znaków zamiast hasła
[*]skrypt dostaje login użytkownika oraz nasz ciąg znaków
[*]skrypt sprawdza adres IP użytkownika, czyta z bazy jego hasło (wg. loginu) i w oparciu o te dane również generuje ciąg znaków używając MD5
[*]teraz skrypt może porównać oba ciągi znaków - jeśli są identyczne, to użytkownik podał prawidłowe hasło i można dać mu odpowiednie uprawnienia
[*]jeśli włamywacz przechwyci ciąg znaków zakodowany MD5 i login, to nic nie zdziała, bowiem ciąg znaków wygenerowany po stronie serwera będzie inny ze względu na inny adres IP włamywacza
[*]jeśli włamywacz będzie chciał sam wygenerować ciąg znaków, to też nic nie zdziała, bowiem musiałby znać hasło użytkownika
[list]

Rozwiązanie nie jest oczywiście w 100% niezawodne. W końcu użytkownik z włamywaczem mogą korzystać z tego samego firewalla lub serwera proxy z wyłączoną funkcją transmisji wewnętrznych adresów IP. Przy wyłączonym Javascripcie logowanie też zadziała, ale hasło pofrunie otwartym tekstem.

Warto jednak pamiętać, że SSL umożliwia nie tylko kodowanie transmisji, ale także weryfikację czy dany serwis jest rzeczywiście tym serwisem, za który się podaje. Bez SSL łatwo wprowadzić użytkownika w błąd, na przykład z pomocą wykrytego niedawno błędu w Internet Explorerze.

Nie rozumiem jednak co mają do tego liczby losowe i w jaki sposób ich brak niszczy ten algorytm :?
Go to the top of the page
+Quote Post

Posty w temacie
- squid   Wlasny ssl   5.12.2003, 17:12:36
- - adwol   http://forum.php.pl/viewtopic.php?p=48068#48068 Mo...   5.12.2003, 19:52:36
- - squid   calkiem ciekawe, dziekuje, narazie mi to wystarczy...   5.12.2003, 21:05:35
- - pat_   Nie wiem czy rozumiem, ale gdybyś do zakodowanej i...   3.01.2004, 22:58:34
- - squid   jesli zrezygnuje z dodawania czasu to spadnie bezp...   8.01.2004, 22:18:41
- - enceladus   Nie wiem czy ktoś to proponował, ale co myślicie o...   8.01.2004, 22:38:26
- - squid   na pierwszy rzut oka pomysl niezly ale mam jedno '...   8.01.2004, 22:45:51
- - enceladus   Cytatna pierwszy rzut oka pomysl niezly ale mam je...   8.01.2004, 23:07:33
- - adwol   Cytat1. hasło na serwerze nie jest jawne Ale to ni...   8.01.2004, 23:36:23
- - enceladus   CytatCytat1. hasło na serwerze nie jest jawne Ale ...   8.01.2004, 23:50:10
- - adwol   CytatZmienia i to dużo - kłania się ludzkie lenist...   9.01.2004, 00:08:21
- - enceladus   CytatCytatZmienia i to dużo - kłania się ludzkie l...   9.01.2004, 00:09:18
- - enceladus   CytatJest to mój przykład i nie widzę na jakiej po...   9.01.2004, 00:27:17
- - adwol   Przyjrzałem się teraz temu kodowi i faktycznie nie...   9.01.2004, 00:43:08
- - enceladus   CytatPrzyjrzałem się teraz temu kodowi i faktyczni...   9.01.2004, 00:57:24
- - a1internet   Cytat5. Atakujący przerabia stronę logowania, wsta...   11.01.2004, 23:00:37
- - squid   pod warunkiem ze ip sie nie zmieni czyli mowimy tu...   11.01.2004, 23:16:00
- - enceladus   CytatWarto generować MD5 nie tylko w oparciu o has...   11.01.2004, 23:24:38
- - a1internet   Cytatpod warunkiem ze ip sie nie zmieni czyli mowi...   12.01.2004, 02:38:06
- - Bora   Ja chcąc zebezpieczyć kod wziąłem sie za sesje. I...   12.01.2004, 02:51:04
- - a1internet   CytatKtóre MD5 - bo nie bardzo rozumiem ?   A...   12.01.2004, 03:19:24
- - Bora   CytatWątek dotyczył tego, jak dokonać autoryzacji ...   12.01.2004, 03:35:33
- - enceladus   CytatWątek dotyczył tego, jak dokonać autoryzacji ...   12.01.2004, 09:22:49
- - Bora   mój poprzedni komentarz pisałem w nocy i choziło p...   13.01.2004, 11:23:14


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: 9.10.2025 - 13:18