Estoy utilizando tokens anti-CSRF en todos mis formularios para evitar ataques CSRF. Además, los tokens se guardan en la variable $ _COOKIE para validar el valor que obtengo del formulario. Estoy restableciendo el token cada vez que se carga un formulario.
Pero hay algunos formularios que usan $ .post, es decir, AJAX para enviar y obtener una respuesta JSON.
La variable $ _COOKIE no se establece debido a que se está utilizando AJAX.
¿Hay alguna solución o estoy haciendo algo mal?
EDITAR: Agregar ejemplo de código del lado del cliente y del servidor
lado del cliente:
<?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>
lado del servidor:
if($_POST['csrf'] == $_COOKIE['token']) {
//process further
} else {
die("Invalid form source")
}
El formulario se envía usando $ .post. El problema al que me enfrento es que $ _POST ['csrf'] nunca es igual a $ _COOKIE ['token']!