No. Podría estar confundiendo la inyección de SQL con la inyección de datos; las tablas de solo lectura no impiden la inyección de SQL y, en el mejor de los casos, solo un poco para limitar su impacto.
La inyección SQL simplemente significa la capacidad de inyectar código SQL. Si bien las tablas de solo lectura pueden limitar la capacidad de insertar datos en la tabla, no afectan la capacidad de:
- Lea de otras bases de datos o tablas si no está deshabilitado
- Lee de las tablas del sistema o ejecuta otras consultas del sistema que son difíciles de rechazar
- Escriba consultas excesivamente complejas que realizarán una DoS
- Exfiltrate los datos mediante DNS
- Acceda a los archivos locales (por ejemplo, utl_file en Oracle)
- Acceda a la red del servidor DB (por ejemplo, utl_http en Oracle)
- Ejecute código arbitrario en el servidor a través de función de DB desbordamientos de búfer
- Consulte Inyección avanzada de SQL en bases de datos Oracle para un buen paseo a través de todo el tipo de cosas que necesita preocuparse (y darse cuenta de que otras bases de datos tienen sus equivalentes)
Si usted
básicamente, solo queremos agregar lo que ingresan a la declaración select
.
entonces estás permitiendo expresamente que el atacante intente cualquiera de estos.
Ahora, ciertamente puedes hacer cosas para limitar esto. Puede no permitir comillas y caracteres de separador de sentencias SQL. Puede rechazar cualquier entrada que no sea [A-Za-z0-9"=]
(o equivalente equivalente para su base de datos). Pero si comienza a seguir este camino, es mejor que escriba su aplicación correctamente : exponga una interfaz de consulta más rica en la que ofrezca las claves que deben verificarse y luego realice la cotización adecuada en cualquier valor que el usuario entra.