Pergunta

Eu tenho investigado parâmetros com valor de tabela no SQL Server 2008 e descobri que, ao passar esse parâmetro para um procedimento armazenado, uma consulta como a seguinte é enviada ao servidor de banco de dados:

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

Minha pergunta é: quão seguro contra ataques de injeção de SQL é isso, dado que as declarações de inserção não são parametrizadas? Eu tentei o ataque mais trivial contra ele, e as citações foram escapadas adequadamente, mas alguém fez um teste exaustivo ou há algo mais acontecendo aqui que me protegeria?

Foi útil?

Solução

Você não precisa se preocupar com ataques de injeção de SQL com TVPS.

Parece um monte de chamadas de singleton, mas não é. Como apontou meu colegas Keith Elmore no Microsoft CSS, essa é apenas a convenção usada para permitir que os dados sejam exibidos ou copiados/colados em uma janela de consulta e executem. O TVP não é realmente implementado dessa maneira - as linhas são transmitidas como uma inserção em massa - mas pode ter levado a essa impressão de que faz inserções simples.

Fonte: http://blogs.msdn.com/mikecha/archive/2009/08/07/two-fast-ways-to-bulk-insert-lient-generated-data-to-sql-database.aspx

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top