Hoe kan je veilig inloggen met ajax? Op dit moment heb ik gewoon een formulier dat met post de username en pass doorsturen nadat er op een button is gedrukt. Waar moet ik op letten als ik dit met ajax wil doen?
Als mensen javascript uit hebben dat mensen dan niet meer inkunnen loggen?
De inlog gegevens alsnog met PHP controleren
Het is niet erg dat die data met Javascript wordt verzonden, dat gebeurt bij een normaal formulier ook: <form method="post" action="login.php">

Laat het eerst werken zonder Javascript, en vervolgens met. Met Javascript, bijvoorbeeld jQuery, gaat het zo:


$('#formulier').submit(function(){
    var url = $(this).attr('action');
	var data = $(this).serialize() + '&methode=javascript';
	$.post(url,  data, function(respons){
		if(respons == 'gelukt') alert('Ingelogd!');
	});
});


En met PHP kijk je of $_POST['methode'] == 'javascript'.
Mijn login formulier met ajax dat gebruikt maakt van mootools werkt ook net ^^
dus het is net zo veilig..?
ik zag namelijk allerlei scripts die met allerlei javascript encrypties werkte..
ik zie dat dit werkt met een GET.
is dit veilig in AJAX?
want ik weet dat bij een login (in normale omstandigheden) een GET method wordt vermeden. (veiligheidsredenen)

en wat een toeval :D
ik ben ook bezig met een login formulier in AJAX :D
maar ik weet niet echt specifiek wat ik moet doen :S

(mijn topic: http://www.phphulp.nl/forum/showtopic.php?cat=5&id=70315&lasttopic=1)

ik heb juist het probleem dat ik niet goed weet hoe ik de gegevens moet in mijn url stoppen, want het is een beetje moeilijk met te weinig aanhalingstekens :S

maar ik heb het gevoel dat ik het bijna heb (:

mvg kasper
Hallo

Het is gelukt. Ik heb het zo opgelost:

javascript:

var layerId;

var postValues = new Array();

function loadPost(postName, postLayer){
	postValues[postName] = document.getElementById(postLayer).value;
}

function postAjaxAction(_layerId, _url){
	layerId = _layerId;	
	
	var _parameters = "";
	
	for (var x in postValues){
		var value = postValues[x];
		
		_parameters += x + "=" + value + "&";
	}
		
	xmlhttp=GetXmlHttpObject();
	if (xmlhttp==null){
		alert ("Browser does not support HTTP Request");
		return;
	}
	xmlhttp.onreadystatechange=stateChanged;
	xmlhttp.open("POST",_url,true);
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlhttp.setRequestHeader("Content-length", _parameters.length);
    xmlhttp.setRequestHeader("Connection", "close");
	xmlhttp.send(_parameters);
}

var xmlhttp;

function GetXmlHttpObject(){
	if (window.XMLHttpRequest){
		// code for IE7+, Firefox, Chrome, Opera, Safari
		return new XMLHttpRequest();
	}
	if (window.ActiveXObject){
		// code for IE6, IE5
		return new ActiveXObject("Microsoft.XMLHTTP");
	}
	return null;
}

function stateChanged(){
	if (xmlhttp.readyState==3){
		document.getElementById("ajaxProgress").style.display = 'block';
	}else{
		document.getElementById("ajaxProgress").style.display = 'none';
	}

	if (xmlhttp.readyState==4){
		document.getElementById(layerId).innerHTML = (xmlhttp.responseText);
		//document.getElementById("error");
	}
}


mijn login-form:


<table>
    <tr>
        <td>Gebruikersnaam</td>
        <td><input type="text" value="" name="username" id="username" /></td>
    </tr>
    <tr>
        <td>Paswoord</td>
        <td><input type="password" value="" name="password" id="password" /></td>
    </tr>
    <tr>
        <td colspan="2" align="center"><input type="submit" id="submit" value="<?php echo $_submitText; ?>" name="submit" onclick="loadPost('submit','submit'); loadPost('password','password'); loadPost('username','username'); postAjaxAction('content','applications/login.php');" /></td>
    </tr>
</table>


Bij mij is het mooi gelukt :) en ik ben er blij mee.
Er staan her en der wel een paar foutjes in :s Ik weet niet in hoeverre dit problemen kan opleveren. Dus als iemand hier opmerkingen over heeft, gelieve mij dit te melden.

mvg kasper
GET is afgeraden voor logins, in logbestanden zie je dan die gegevens.
Niet wenselijk.

Die 'encrypties' van jou iswaarschijnlijk md5 (vBulletin gebruikt dit bv).
Deze werkt als volgt: het slaat de wachtwoorden md5-hashed op in de database.
Voor het verzenden maakt javascript al een hash van het wachtwoord.
Dat is beter als plaintext over het internet versturen, maar je hebt md5 databases.
Beter is dus md5-hashen, en het beste is HTTPS.
Er staat hier toch nergens een GET method?
Er wordt enkel gebruik gemaakt van een POST..

En iedereen weet waarschijnlijk ook wel dat een GET method afgeraden wordt.

mvg kasper

Reageren