这个SP的安全问题是什么?

时间:2012-02-05 07:36:15

标签: tsql

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

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

execute('SELECT ' + @Field + ' from SampleTable where (ID=' + @ID + ');');

我这样做是为了让一个SP而不是几个具有相同结构的SP。 现在我不确定这是否安全?

2 个答案:

答案 0 :(得分:2)

查询不安全。

使用Web系统的客户端可以使用SQL注入攻击删除整个数据库 通过传递 ' ; DROP DATABASE dbname - 而不是id。 如果您打算使用上述查询,请使用参数化SQL存储过程来防止SQL注入攻击。

以下更多详情: -

How to protect from SQL injection attacks in ASP .NET

答案 1 :(得分:2)

您应该使用sp_executesqlquotename来保证安全。

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