Diciamo che esiste un'applicazione AJAX in cui l'utente può inviare articoli: acquistali.
E c'era un codice
IF ($_POST[items] > 20) {
echo 'error';
}
else {
do_buy($_POST[items]);
echo 'success'
}
Qui c'è un controllo se items
non è più di 20. Sul lato client, non dovrebbe essere possibile scegliere più di 20 articoli.
Il sistema funzionerebbe senza problemi anche se fossero stati inviati 21 (o più) articoli (l'utente pagherebbe semplicemente per ogni articolo). Mentre mi rendo conto che devi voler gridare non fidarti del client , c'è qualche danno nel farlo se non ci sono conseguenze, come nel caso qui?
Si potrebbe argomentare che sovraccaricare il carrello potrebbe causare instabilità nel sistema, ma sembra che il caso peggiore sarebbe che alcuni script scadono. Se gli errori sono disabilitati, l'utente non riceverà alcuna risposta.
In generale: ha senso codificare le protezioni per un attacco che viola un invariante del tuo sistema?
Aggiornamento:
$ _ POST ['items'] Volevo dire che è array, non un intero. E ogni elemento come propri proprietà - ID e quantità, che vengono controllati in seguito prima di completare l'operazione di acquisto.
Informazioni su SQL injection: di solito utilizzo i framework e si occupano della protezione dell'iniezione.
Aggiorna
Un altro motivo per cui chiedo questo è che voglio tutto il codice pulito possibile e anche quando qualcuno lo legge - penserà perché diavolo è necessario, questo programmatore non sa cosa sta programmando e perché. Quindi per tutto il codice voglio avere una chiara ragione per cui quel pezzo di codice esiste e quindi se non nel commento, almeno io stesso avrei capito bene perché faccio questo controllo in modo da poter spiegare se un altro programmatore chiede.