从SQL注入使SQL Server存储过程安全

Con*_*eak 5 t-sql sql-server sql-server-2008

这可以很容易地在这里注入,因为@ID参数通过输入它几乎可以在这个SQL语句中的任何内容,但是,你如何防止这种利用?

我更喜欢在这个级别而不是应用程序级别,任何建议专门防止此漏洞利用?

CREATE PROCEDURE [dbo].[GetDataByID]
@ID bigint,
@Table varchar(150)
AS
BEGIN

Declare @SQL Varchar(1000)

SELECT @SQL = 'SELECT * FROM ' + @Table + ' WHERE ID = ' + CONVERT(varchar,@ID)

SET NOCOUNT ON;

EXEC(@sql)  
END
Run Code Online (Sandbox Code Playgroud)

Seb*_*Piu 9

查看此页面,它有一个很好的动态sql指南,以及安全执行它们的选项

在你的情况下它应该是这样的:

SELECT @SQL =  N'SELECT * FROM ' + quotename(@Table) + N' WHERE ID = @xid' 
EXEC sp_executesql @SQL, N'@xid bigint', @ID
Run Code Online (Sandbox Code Playgroud)