Non è possibile garantire che i dati provengano da un modulo . Una richiesta POST è solo una richiesta POST, può essere generata in diversi modi. Un modulo HTML è solo uno di quei modi che è molto facile da usare. Il server deve convalidare se i dati ricevuti tramite la richiesta POST sono validi o meno e se intervenire o meno.
Detto questo, ci sono cose che possono aiutare a limitare e convalidare i dati che vengono inviati. Prima di tutto, è necessario che un utente abbia effettuato l'accesso utilizzando i cookie (di sessione). Questo elimina richieste casuali da parte di utenti anonimi. In secondo luogo, è possibile incorporare un token come campo nascosto nel modulo che si salva anche nella sessione dell'utente. La richiesta POST deve contenere quel token per essere valido. Il token è semplicemente una stringa pseudo-casuale.
È possibile migliorare ciò preparando un hash dei campi modulo che si prevede che l'utente invii. Se il valore del modulo deve essere di sola lettura, è possibile includere anche il valore nell'hash. Per esempio.:
$rand = md5(mt_rand());
$hash = sha1('lastname:firstname:email:' . $rand);
$_SESSION['rand'] = $rand;
$_SESSION['hash'] = $hash;
// on form submit:
$keys = array_keys($_POST);
$checkHash = sha1(join(':', $keys) . ':' . $_SESSION['rand']);
if ($checkHash != $_SESSION['hash']) {
die('Form submission failed token validation');
}
Questo è solo un esempio veloce, probabilmente si vorrà per ordinare le chiavi in ordine alfabetico per assicurarsi che si otterrà lo stesso hash, ecc Essa dimostra il concetto di che l'utente debba avere un token univoco per ogni richiesta però che impedisce di temperare con i moduli e di inviare più o meno dati di quanto desiderato.
Ciò non significa che un utente abbia effettivamente utilizzato il modulo per inviare i dati.
Grazie per questo non avevo pensato alle altre implicazioni di questa azione. Anche se penso che questi problemi potrebbero essere evitati usando qualcosa di simile a 'if (! Isset ($ _ SESSION ['hash'])) {create hash} else {usa l'hash esistente}'. –