M-am lovit de o problema foarte ciudata si pentru care nu reusesc sa gasesc o solutie, sau macar o explicatie.
Doresc sa setez o cheie de siguranta la fiecare incarcare a paginii (random), cheie ce va fi stocata pe sesiune, si care va fi verificata la fiecare trimitere a unui formular.
Intr-o ordine cronologica pasii ar fi urmatorii:
1)Setez cheia la accesarea paginii in care se afla formularul (o stochez pe sesiune si o atribui ca si valoare unui imput de tip hidden).
2) Trimit datele formularului (action este aceiasi pagina).
3) Verific daca cheia stocata initial pe sesiune este identica cu cea venita pe REQUEST de la formular.
4) Reinoiesc cheia pentru urmatoarea utilizare.
Problema este ca la a doua retrimitere a formularului valorile din sesiune difera de la Mozila la Chrome.
Chrome-ul returneaza corect, insa pe Firefox valoarea cheii salvate pe sesiune este cu totul alta, total diferita de cea actuala setata, sau cheia precedenta.
Mai jos aveti codul in care setez valoarea cheii si fac comparatie intre ce vine pe REQUEST si ce e in SESSION.
Inca o mentiune, metoda de trimitere a formularului este GET.
Cod: Selectaţi tot
if(!isset($_SESSION['csrf'])) {
$sec = rand();
$_SESSION['csrf'] = $sec;
}
else {
if(isset($_GET['csrf']) || (!isset($_GET['csrf']) && isset($_GET['searchWord']))) {
if($_SESSION['csrf'] != $_GET['csrf']) {
echo "Redirect...";
}
echo $_SESSION['csrf']; //same value as $_GET['csrf'] in Chrome, different in Firefox
echo $_GET['csrf']; //same value as $_SESSION['csrf'] in Chrome, different in Firefox
}
$sec = rand();
$_SESSION['csrf'] = $sec;
}
Aveti idee de ce se intampla aceasta diferenta intre browsere? Care ar fi solutia pentru remedierea problemei?
Astept raspunsurile voastre si bineinteles va stau la dispozitie pentru orice nelamurire sau intrebare.
Multumesc,
Cu stima