SQL 注入通过这个存储过程可以造成多大的破坏?
How much damage can SQL injection do via this stored procedure?
最近偶然发现一个由前人硬编码的存储过程来执行一些CRUD。它影响生产数据库中的非关键表。我觉得它很容易受到 SQL 注入的攻击,但看起来注入确实是无害的,因为它在非关键表上执行 CRUD。
@LocalDatabase参数是从connectionString="Server=localHost;Database=localDatabase;..."
配置文件中传入的。
我想知道在这个特定的 SP 中可能的 SQL 注入是否会对生产数据库造成灾难性的损害?我正在权衡重写整个模块的成本效益。
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
感谢任何指向正确方向的建议或帮助。提前致谢。
只要用户不影响作为@LocalDatabase 传入的值,这种方法就可以。不使用动态 SQL 会更好,但这种方法可以工作...
最近偶然发现一个由前人硬编码的存储过程来执行一些CRUD。它影响生产数据库中的非关键表。我觉得它很容易受到 SQL 注入的攻击,但看起来注入确实是无害的,因为它在非关键表上执行 CRUD。
@LocalDatabase参数是从connectionString="Server=localHost;Database=localDatabase;..."
配置文件中传入的。
我想知道在这个特定的 SP 中可能的 SQL 注入是否会对生产数据库造成灾难性的损害?我正在权衡重写整个模块的成本效益。
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
感谢任何指向正确方向的建议或帮助。提前致谢。
只要用户不影响作为@LocalDatabase 传入的值,这种方法就可以。不使用动态 SQL 会更好,但这种方法可以工作...