¿Los parámetros de SQL Server 2008 Table Valued son vulnerables a los ataques de inyección SQL?
-
07-07-2019 - |
Pregunta
He estado investigando los parámetros con valores de tabla en SQL Server 2008, y descubrí que al pasar dicho parámetro a un procedimiento almacenado, se envía una consulta como la siguiente al servidor de la base de datos:
declare @p1 dbo.MyTypeName
insert into @p1 values(N'row1col1',N'row1col2')
insert into @p1 values(N'row2col1',N'row2col2')
insert into @p1 values(N'row3col1',N'row3col2')
insert into @p1 values(N'row4col1',N'row4col2')
insert into @p1 values(N'row5col1',N'row5col2')
exec StoredProcedureName @MyParam=@p1
Mi pregunta es, ¿qué tan seguro frente a los ataques de inyección SQL es esto, dado que las instrucciones de inserción no están parametrizadas? Intenté el ataque más trivial contra él, y las citas se escaparon correctamente, pero ¿alguien ha realizado una prueba exhaustiva o hay algo más aquí que me proteja?
Solución
No necesita preocuparse por los ataques de inyección SQL con TVP.
Esto parece un montón de singleton llama pero no lo es. Como mi colega Keith Elmore en Microsoft CSS señaló fuera, esa es solo la convención utilizada para permitir que se muestren los datos o copiado / pegado en una ventana de consulta y correr. El TVP no es realmente implementado de esa manera: las filas son transmitido como un bulto insertar, pero puede haber llevado a esto impresión de que lo hace simple insertos.