Hay algunos tipos de software, como ORM y constructores de consultas, que tienen que concatenar nombres de columnas y tablas en consultas SQL. Dado que los desarrolladores aparentemente colocan datos no confiables en todo tipo de lugares sin segundos, una estrategia sensata para tal biblioteca sería validar que el nombre provisto es en realidad un nombre, y no un ataque SQLi.
Una forma sencilla de hacerlo sería coincidir con una expresión regular como /[a-zA-Z_]+/
. Sin embargo, esto limitaría los nombres de columna que pueden usarse. Muchos DBMS son bastante liberales en cuanto a qué nombres de columna permiten, y no quiero introducir restricciones artificiales.
Por lo tanto, lo que estoy buscando es un enfoque para validar o sanear los nombres de tablas y tablas de bases de datos. Puede ser una tarea difícil, pero lo ideal sería:
- Trabajo para las principales bases de datos: Postgres, MySQL, Oracle, MSSQL, etc.
- Limite qué nombres de columna se pueden usar lo menos posible.
- Sé inmune a SQLi.
Se pueden hacer compromisos con respecto al # 1 y # 2, pero no al # 3.