Los datos GET y POST son datos enviados directamente por el usuario. Lo obtienes en bruto, sin verificaciones ni validaciones entre el usuario y tu programa. Incluso si validara el formulario que debería originar los datos, un atacante podría crear manualmente una solicitud con los datos que desee. Por lo tanto, siempre debe tratar los datos solicitados como una entrada de usuario no confiable.
Hay una serie de ataques que dependen del codificador, olvidando que los datos solicitados no son confiables, pero el más conocido es la inyección SQL. La causa raíz de la inyección de SQL es crear una consulta mediante la concatenación manual de cadenas, algunas de las cuales son entradas de usuario que no son de confianza. Esto significa que le está diciendo a su base de datos que ejecute la entrada del usuario que no es de confianza.
La solución ingenua para inyección SQL es validar las entradas y luego concatenarlas en una cadena de consulta, pero esta también es deficiente. Confía en su lógica de validación para hacer que la cadena sea segura, y si la usa mal, o si la lógica tiene errores, entonces estará nuevamente expuesto a los ataques.
La solución correcta es separar su consulta de los datos que contiene. Prácticamente todos los adaptadores de bases de datos admiten este enfoque, y si el suyo no lo hace por algún motivo, no es apto para su uso. La expresión más común es (en ningún idioma en particular):
myDB.query ("select * from Stuff where id =?", [42]);
Esto garantizará (en dicho sistema) que los parámetros no se ejecuten. La cadena de consulta se crea a partir de datos totalmente confiables, mientras que los datos que no son de confianza se segregan.En el peor de los casos, este enfoque aplicado a entradas incorrectas puede dar como resultado datos incorrectos, no un comando incorrecto.
Este enfoque para evitar la inyección de SQL pone de relieve el principio central que se aplica a todo tipo de ataques de datos de solicitud: los datos de solicitud no son suyos y no son seguros. Al manejar cualquier entrada de usuario, incluidos los datos de solicitud, suponga siempre que se origina de un atacante con un conocimiento profundo de su sistema. Puede parecer paranoico, pero te mantiene a salvo.
La regla general es "no confíe en la entrada del usuario". Todo lo que entre el usuario en cualquier forma debe ser verificado. – Jess