最近偶然发现了一个由前辈硬编码的存储过程来执行某些CRUD。它会影响生产数据库中的非关键表。我觉得它很容易受到SQL注入的影响,但似乎注入非常无害,因为它在非关键表上执行CRUD。
@LocalDatabase参数从配置文件中的ALTER PROCEDURE StoredProc_Name
(
@LocalDatabase varchar(50),
@Result int OUTPUT
)
SET @Sql = N'UPDATE <Production Database>.Table1
SET ...
FROM <Production Database>.NewTable INNER JOIN
'+ @LocalDatabase +'.dbo.Table1 ON ... INNER JOIN
'+ @LocalDatabase +'.dbo.Table2 ON ...
WHERE NOT EXISTS(SELECT 1
FROM <Production Database>.dbo.Table2
WHERE .....)'
EXEC(@Sql)
SET @Result = @@ROWCOUNT
传入。
我想知道这个特定SP中可能的SQL注入是否会对生产数据库造成灾难性的损害?我正在权衡重写整个模块的成本效益。
{{1}}
感谢任何建议或帮助指出正确的方向。提前谢谢。
答案 0 :(得分:1)
只要用户不影响作为@LocalDatabase传入的值,这种方法就可以了。不使用动态SQL会更好,但这种方法可以工作......