Tsql 此SP存在哪些安全问题

Tsql 此SP存在哪些安全问题,tsql,Tsql,我有一个查询,返回通过参数发送的字段值: @Field nvarchar(50), @ID int ... execute('SELECT ' + @Field + ' from SampleTable where (ID=' + @ID + ');'); 我这样做是为了有一个SP,而不是具有相同结构的多个SP。 现在我不确定这是否安全?查询不安全 使用web系统的客户端可以使用SQL注入攻击删除整个数据库 路过",;删除数据库dbname——而不是id。 如果您计划使用上述查询,请使用参数

我有一个查询,返回通过参数发送的字段值:

@Field nvarchar(50),
@ID int
...

execute('SELECT ' + @Field + ' from SampleTable where (ID=' + @ID + ');');
我这样做是为了有一个SP,而不是具有相同结构的多个SP。 现在我不确定这是否安全?

查询不安全

使用web系统的客户端可以使用SQL注入攻击删除整个数据库 路过",;删除数据库dbname——而不是id。 如果您计划使用上述查询,请使用参数化SQL存储过程来防止SQL注入攻击

详情如下:-

查询不安全

使用web系统的客户端可以使用SQL注入攻击删除整个数据库 路过",;删除数据库dbname——而不是id。 如果您计划使用上述查询,请使用参数化SQL存储过程来防止SQL注入攻击

详情如下:-

为了安全起见,您应该使用

declare @SQL nvarchar(max)
set @SQL = 'select '+quotename(@Field)+' from SampleTable where ID = @ID'
exec sp_executesql @SQL, N'@ID int', @ID
你应该使用和确保安全

declare @SQL nvarchar(max)
set @SQL = 'select '+quotename(@Field)+' from SampleTable where ID = @ID'
exec sp_executesql @SQL, N'@ID int', @ID

我知道,这个查询在一个以“Field”和“ID”为参数的存储过程中。并且ID的类型设置为int。@reza-您不会因为使用存储过程而受到SQL注入的保护。您正在SP中动态生成语句,并且您可能会受到攻击。我知道,此查询位于以“Field”和“ID”为参数的存储过程中。并且ID的类型设置为int。@reza-您不会因为使用存储过程而受到SQL注入的保护。您正在SP中动态生成该语句,并且对攻击是开放的。