sql >> Base de Datos >  >> RDS >> Sqlserver

SQL Server - Tabla dinámica dinámica - Inyección SQL

Hemos hecho mucho trabajo similar a su ejemplo. No nos hemos preocupado por la inyección de SQL, en parte porque tenemos un control completo y total sobre los datos que se pivotan:simplemente no hay forma de que el código malicioso pueda pasar a través de ETL a nuestro almacén de datos.

Algunas reflexiones y consejos:

  • ¿Está obligado a pivotar con columnas nvarcahr(500)? Los nuestros son varchar(25) o numéricos, y sería bastante difícil colar código dañino a través de ellos.
  • ¿Qué hay de la verificación de datos? Parece que si una de esas cadenas contenía un carácter "]", es un intento de pirateo o datos que explotarán de todos modos.
  • ¿Qué tan robusta es su seguridad? ¿El sistema está bloqueado de tal manera que Malorey no puede infiltrar sus hacks en su base de datos (ya sea directamente o a través de su aplicación)?

Ja. Tomó escribir todo eso para recordar la función QUOTENAME(). Una prueba rápida parecería indicar que agregarlo a su código funcionaría (obtendrá un error, no una tabla temporal descartada):

SELECT
        @columns = 
        STUFF
        (
                (
                        SELECT DISTINCT
                                ', [' + quotename(ColumnB, ']') + ']'
                        FROM
                                #PivotTest
                        FOR XML PATH('')
                ), 1, 1, ''
        )

Esto debería funcionar para situaciones de pivote (y no pivote), ya que casi siempre tiene que [entre paréntesis] sus valores.