Tengo una url con un parámetro $ _GET que permite eliminar un registro en mi base de datos, por ejemplo. localhost / app / delete.php? id = 4843.
La página delete.php solo verifica si el usuario ha iniciado sesión y si es el propietario del registro de la base de datos. Obviamente, esto crea la apertura perfecta para un ataque CSRF. ¿Debo generar el nonce cuando se carga la página, o lo hago de alguna manera solo cuando el usuario hace clic en la URL? ¿Cómo podría?
Aquí está mi código hasta ahora:
function nonce_create() {
$_SESSION["nonce"] = random_bytes(12);
$_SESSION["nonce_time"] = time();
}
function nonce_verify() {
$time = time() - 90; /* give browser 90 seconds to load */
if (isset($_SESSON["nonce"]) && strlen($_SESSION["nonce"]) == 7 && $_SESSION["nonce_time"] > $time) {
$_SESSION["nonce"] = null;
}
else {
header("location: index.php");
}
}
Se llamará a la función nonce_create () anterior al cargar la página donde hay enlaces a la página delete.php, y se llamará a la función nonce_verify () cuando sea necesario verificar y eliminar el nonce en delete.php.