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}
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