Digamos que hay una aplicación AJAX donde el usuario puede enviar artículos, comprarlos.
Y había un código
IF ($_POST[items] > 20) {
echo 'error';
}
else {
do_buy($_POST[items]);
echo 'success'
}
Aquí, se comprueba si items
no es más de 20. En el lado del cliente, no debería ser posible elegir más de 20 elementos.
El sistema funcionaría sin problemas, incluso si se enviaran 21 (o más) elementos (el usuario simplemente pagaría por cada elemento). Si bien me doy cuenta de que debe querer gritar no confíe en el cliente , ¿hay algún daño al hacerlo si no hay consecuencias, como ocurre aquí?
Uno podría argumentar que la sobrecarga del carrito podría causar inestabilidad en el sistema, pero parece que el peor de los casos sería que el tiempo de espera de algunos scripts. Si se deshabilitan los errores, el usuario simplemente no recibirá ninguna respuesta.
En general: ¿Tiene sentido codificar las protecciones para un ataque que viola una invariante de su sistema?
Actualizar:
$ _POST ['items'] Quise decir que es una matriz, no un entero. Y cada elemento tiene propiedades propias: identificación y cantidad, que se verifican más adelante antes de completar la operación de compra.
Sobre la inyección de SQL: por lo general uso frameworks, y ellos se encargan de la protección de la inyección.
Actualizar
Una razón más por la que pregunto esto es que quiero tanto código limpio como sea posible y también cuando alguien lo lea, pensará por qué demonios es necesario, este programador no sabe qué está programando y por qué. Entonces, para todo el código, quiero tener una razón clara de por qué existe ese fragmento de código y, si no está en el comentario, entonces, al menos yo mismo, tendría un claro entendimiento de por qué hago esta verificación para poder explicar si otro programador pregunta.