He oído que afirma que la solución más simple para evitar ataques de inyección SQL es html codificar todo el texto antes de insertarlo en la base de datos. Luego, obviamente, decodifique todo el texto al extraerlo. La idea es que si el texto solo contiene signos de unión, comas y caracteres alfanuméricos, entonces no se puede hacer nada malicioso.¿Es htmlencoding una solución adecuada para evitar ataques de inyección SQL?
Mientras veo una serie de casos en los que esto puede parecer a trabajar, preveo los siguientes problemas en el uso de este enfoque:
- Se anuncia como una bala de plata. Posiblemente impida que los usuarios de esta técnica comprendan todos los posibles problemas relacionados, como los ataques de segundo orden.
- No evita necesariamente los ataques de segundo orden/carga demorada.
- Está utilizando una herramienta para un propósito diferente al que fue diseñado. Esto puede generar confusión entre futuros usuarios/desarrolladores/encargados del código. También es probable que esté lejos de ser óptimo en la ejecución del efecto.
- Añade un posible impacto de rendimiento a cada lectura y escritura de la base de datos.
- Hace que sea más difícil leer los datos directamente desde la base de datos.
- Aumenta el tamaño de los datos en el disco. (Cada personaje ahora siendo ~ 5 caracteres - A su vez esto también puede afectar a los requisitos de espacio de disco, paginación de datos, el tamaño de los índices y el rendimiento de los índices y más?)
- Hay problemas potenciales con los caracteres Unicode de alta gama y combinación de caracteres?
- Algunas rutinas/bibliotecas de codificación html [en | de] se comportan de forma ligeramente diferente (por ejemplo, algunas codifican un apóstrofo y otras no). Puede haber más diferencias.) Esto vincula los datos al código utilizado para leer &. . Si usa un código que [en | de] codifica de manera diferente, los datos pueden ser cambiados/corruptos.
- Potencialmente hace que sea más difícil trabajar con (o al menos eliminar errores) cualquier texto que ya esté codificado de manera similar.
¿Hay algo que me falta?
¿Es este realmente un enfoque razonable para el problema de la prevención de ataques de inyección SQL?
¿Hay algún problema fundamental para tratar de prevenir los ataques de inyección de esta manera?
¡La forma más fácil de evitar los ataques de inyección es no hacerlo! Las consultas parametrizadas se crearon específicamente para este problema y también proporcionan un aumento del rendimiento para las consultas que solo difieren en los valores. Por favor, no, ¡un ángel muere cada vez que un desarrollador agrega valores a sql! * wink * – Will
Para el registro, no hago esto y no creo que sea una buena idea. ¡Solo quiero asegurarme de que entiendo todas las razones por las que esto es malo! –
Consulte la gran información y tutoriales en Open Web App Security Project: https://www.owasp.org –