Uso i token anti-CSRF su tutti i miei moduli per prevenire gli attacchi CSRF. Inoltre, i token vengono salvati nella variabile $ _COOKIE per convalidare il valore ottenuto dal modulo. Sto reimpostando il token ogni volta che viene caricato un modulo.
Ma ci sono alcuni moduli che usano $ .post, cioè AJAX da inviare e ottenere una risposta JSON.
La variabile $ _COOKIE non è impostata a causa dell'uso di AJAX.
C'è una soluzione alternativa o sto facendo qualcosa di sbagliato?
EDIT: aggiunta di esempi di codice lato client e lato server
sul lato client:
<?php
$tokenVal = md5(uniqid(mt_rand(), true));
setcookie ("token", $tokenVal);
?>
<form action="target.php" method="post" name="abc">
<input type="text" name="city" id="city" value="abc" size="25" maxlength="10">
<input type="hidden" name="csrf" value="<?php echo $tokenVal; ?>">
<a class="cssButton buttonColor right" id="billToSubmit">Save</a>
</form>
lato server:
if($_POST['csrf'] == $_COOKIE['token']) {
//process further
} else {
die("Invalid form source")
}
Il modulo è stato inviato usando $ .post. Il problema che sto affrontando è che $ _POST ['csrf'] non è mai uguale a $ _COOKIE ['token']!