 |
Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Comunitatea PHP Romania
|
| Subiectul anterior :: Subiectul următor |
| Autor |
Mesaj |
tatacalu
Data înscrierii: 03/Noi/2006
Mesaje: 18
|
| Trimis: Joi Apr 05, 2007 3:16 am Titlul subiectului: AJAX si HTTPS din pagina HTTP |
|
|
salutare!
am si eu o problema.
as vrea sa fac un sistem de login pentru un site, cu ajax.
logarea se face dintr-o pagina cu acces HTTP, fiindca se face printr-un "pseudo-popup" - adica in momentul in care se da click pe un link apare un formular de login in mijlocul paginii, logarea putandu-se face [prin conceptia siteului] din orice pagina a lui prin acel formular care apare in mijlocu paginii in momentul clickului pe acel link care, fireste in acest caz apare pe toate paginile in cazul in care utilizatorul nu este logat.
codul ar fi cam urmatorul:
Cod:
function getxmlhttp()
{
var xmlhttp = false;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}
xmlHttpInstance = getxmlhttp();
xmlHttpInstance_PostParams = 'var123=val123';
xmlHttpInstance.onreadystatechange = function() {
if (xmlHttpInstance.readyState == 4) {
// procesare raspuns
}
}
xmlHttpInstance.open('POST', 'https://192.168.0.1/path/to/login/script.php', true);
xmlHttpInstance.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlHttpInstance.setRequestHeader("Content-length", xmlHttpInstance_PostParams.length);
xmlHttpInstance.setRequestHeader("Connection", "close");
xmlHttpInstance.send(xmlHttpInstance_PostParams);
cand rulez aceasta portiune, Internet Explorer imi da o eroare ciudata ca nu poate seta colSpanul, ca el trebuie sa fie intre 0 si 1000 [nu stiu ce legatura are colspan cu ceea ce e acolo], iar FireFox 2 imi spune Permission Denied la portiunea xmlHttpInstance.open
chestia este ca haca inlocuiesc linia din cod cu urmatoarea:
xmlHttpInstance.open('POST', 'http://192.168.0.1/path/to/login/script.php', true); [adica daca folosesc HTTP:// in loc de HTTPS:// totul merge OK.
ps: serverul este testat, suporta HTTPS, iar "https://192.168.0.1/path/to/login/script.php" este doar un exemplu, nu este calea reala a scriptului.
va rog, daca poate careva sa ma ajute, am rascolit tot netul si nu am gasit nici o solutie. am gasit doar eventual anumite topicuri pe anumite forumuri care relatau ca ei lucreaza cu AJAX/HTTPS de mult timp si nu au nici o problema
asadar, va rog, ajutor!
succes! |
|
| Sus |
|
carco
Data înscrierii: 27/Mai/2004
Mesaje: 2796
Locație: Bucuresti
|
| Trimis: Joi Apr 05, 2007 7:38 am Titlul subiectului: |
|
|
Conform W3C daca url-ul apelat de metoda open nu are "same-origin", atunci browserul trebuie sa genereze o eroare iar browserele, cel putin cele cu care am lucrat eu, se conformeaza acestei cereri. Cu alte cuvinte nu poti face un request catre alt site, iar in cazul tau, acel https e alt site.
In schimb, folosind XMLHttpRequest, poti sa-ti implementezi propriul tau "S", in linii mari, cam asa (presupun ca in baza de date ai parola stocata ca md5 si nu in clar)
- inainte de a afisa formularul de login, server-side, generezi un "Challenge", o "cheie" pe care o va cunoaste si serverul si clientul:
Cod:
$salt= md5(uniqid(rand(), true));
//pe care o pui si in sesiune
$_SESSION['salt']=$salt;
- in html (client-side) afisezi si aceasta cheie, de ex.
Cod:
<input type="text" id="username" name="username" value='' />
<input type="password" id="password" name="password" value='' />
<input type="hidden" id="salt" name="salt" value='<?php echo $salt; ?>' />
- pe formular, la onsubmit, faci o chestie de genul:
Cod:
var password = document.getElementById("password");
var salt = document.getElementById("salt");
password.value = md5(md5(password.value)+salt.value);
//daca in baza de date parola este in clar,
//password.value = md5(password.value+salt.value);
Acum parola nu mai este in clar, va fi trimis un hash al ei.
- server-side, cand verifici datele luzerului
Cod:
$dbPass = <parola extrasa din baza de date pt. user-ul specificat de $_POST['username']>;
if(md5($dbPass.$_SESSION['salt']) == $_POST['password']) {
//ok
} else {
//not ok
}
functia Javascript md5 impreuna cu o descriere completa a mecanismului de mai sus o gasesti aici:
http://pajhome.org.uk/crypt/md5/auth.html
O alta varianta (dar acelasi lucru)
http://www.ifisgeek.com/tutorials/secure_logins_with_challenge_response/
Mai multe
http://www.google.ro/search?q=Javascript+Challenge-Response+Authentication |
|
| Sus |
|
PHPRomania Bot
Bot Member
Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google |
| Trimis: Mie Dec 26, 2007 7:01 pm Titlul subiectului: Ad |
|
|
|
|
|
| Sus |
|
| |
|