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)
查看此页面,它有一个很好的动态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)