当我准备好的语句具有动态数据库名称时,VeraCode 会抱怨 SQL 注入

问题描述 投票:0回答:1

我的项目需要访问一个SQL Server,其中有数百个数据库。所有这些数据库都有相同的表结构

所以我需要像这样查询这些数据:

select * 
from {0}.dbo.tableA 
where fieldA = ?

在创建准备好的语句之前,

{0}
将被替换为动态数据库名称。

那些动态数据库名称来自服务器扫描,用户无法输入。

VeraCode 抱怨此代码并认为其存在 SQL 注入风险。

但是如果此查询没有动态数据库名称,VeraCode 不会抱怨。如果此查询没有查询参数,VeraCode 不会抱怨。

我还尝试了connection.setCatalog来避免动态数据库名称,发现VeraCode中不允许这样做

我还尝试在替换之前进行 DbName 验证,但在 VeraCode 中仍然失败

我很困惑 VeraCode 如何判断它是否存在 SQL 注入风险。

sql-server sql-injection veracode
1个回答
0
投票

如果您有数据库名称验证,则可以忽略此问题。 https://docs.veracode.com/r/Ignored_Issues

© www.soinside.com 2019 - 2024. All rights reserved.