我一直在研究SQL Server 2008中的表值参数,我发现在将这样的参数传递给存储过程时,会将如下的查询发送到数据库服务器:

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

我的问题是,鉴于插入语句没有参数化,对SQL注入攻击有多安全?我尝试了最琐碎的攻击,并且报价被正确地逃脱了,但是有没有人进行过详尽的测试,或者是否还有其他事情可以保护我?

有帮助吗?

解决方案

您无需担心使用TVP进行SQL注入攻击。

  

这好像是一堆单身人士   打电话,但事实并非如此。作为我的同事   微软CSS的Keith Elmore指出   out,这只是使用的惯例   允许显示数据或   复制/粘贴到查询窗口和   跑。 TVP实际上并不是   以这种方式实现 - 行是   像散装一样流过   插入 - 但它可能导致了这一点   它的确很简单   插入

来源: http://blogs.msdn.com/mikecha/archive/2009/08/07/two-fast-ways-to-bulk-insert-client-generated-data -to-SQL database.aspx

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top