Ho un URL con un parametro $ _GET che consente di cancellare un record nel mio database, ad es. localhost / app / delete.php? id = 4843.
La pagina delete.php controlla solo se l'utente è connesso e possiede il record db. Ovviamente, questo crea l'apertura perfetta per un attacco CSRF. Devo generare il nonce quando la pagina viene caricata, o lo faccio in qualche modo solo quando l'utente fa clic sull'URL? Come potrei?
Ecco il mio codice finora:
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");
}
}
La funzione nonce_create () sopra sarebbe chiamata quando si carica la pagina dove ci sono collegamenti alla pagina delete.php, e la funzione nonce_verify () verrebbe chiamata quando il nonce deve essere verificato e rimosso su delete.php.