Ik ben bezig met het het maken van een loginsysteem. Wanneer een gebruiker een username+password heeft ingevuld en het formulier submit wordt er eerst met een XmlHttpRequest een salt uit de database opgehaald. Dit gebeurt in een Javascript functie die wordt aangeroepen bij "onsubmit". De request is synchroom, niet asynchroom, anders wordt het formulier al gesubmit voordat de salt is opgehaald.
Nu werkt dit prima in Chrome en IE, alleen in FF wil het niet werken. In Firefox wordt het formulier al gesubmit voordat de Ajax request binnenkomt. Ik heb al op Tweakers en Google gezocht naar oplossingen voor dit probleem, maar ik kan niet echt iets werkends vinden. Iemand een idee wat hier fout gaat?
De javascript functie wordt hier aangeroepen:
En dit is de functie:
Nu werkt dit prima in Chrome en IE, alleen in FF wil het niet werken. In Firefox wordt het formulier al gesubmit voordat de Ajax request binnenkomt. Ik heb al op Tweakers en Google gezocht naar oplossingen voor dit probleem, maar ik kan niet echt iets werkends vinden. Iemand een idee wat hier fout gaat?
De javascript functie wordt hier aangeroepen:
HTML:
1
| <form id="login" method="post" action="auth.php" onsubmit="return doChallengeResponse();"> |
En dit is de functie:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
| function doChallengeResponse() { var username = document.getElementById('username').value; if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); } else { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4) { if (xmlhttp.status == 200) { var saltedPassword; var password = document.getElementById('password').value; var challenge = document.getElementById('challenge').value; var salt = xmlhttp.responseText; // Add the salt to the password saltedPassword = password.substring(0,(password.length/2)); saltedPassword = saltedPassword + salt; saltedPassword = saltedPassword + password.substring((password.length/2), password.length); saltedPassword = sha1(saltedPassword); alert(saltedPassword); // De alert wordt in Chrome en IE wel weergegeven. In FF niet. // Empty the password field to prevent it from being send in plaintext document.getElementById('password').value = ''; document.getElementById('challenge').value = ''; // Create the response string document.getElementById('response').value = sha1(username + ':' + saltedPassword + ':' + challenge); return true; } else { return false; } } } var page = "include/inc.getsalt.php"; var params = "user=" + username; xmlhttp.open("POST", page, false); //Send the proper header information along with the request xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xmlhttp.setRequestHeader("Content-length", params.length); xmlhttp.setRequestHeader("Connection", "close"); xmlhttp.send(params); } |
[ Voor 4% gewijzigd door monnick op 14-10-2010 21:25 ]