我的项目需要访问一个SQL Server,其中有数百个数据库。所有这些数据库都有相同的表结构
所以我需要像这样查询这些数据:
select *
from {0}.dbo.tableA
where fieldA = ?
在创建准备好的语句之前,
{0}
将被替换为动态数据库名称。
那些动态数据库名称来自服务器扫描,用户无法输入。
VeraCode 抱怨此代码并认为其存在 SQL 注入风险。
但是如果此查询没有动态数据库名称,VeraCode 不会抱怨。如果此查询没有查询参数,VeraCode 不会抱怨。
我还尝试了connection.setCatalog来避免动态数据库名称,发现VeraCode中不允许这样做
我还尝试在替换之前进行 DbName 验证,但在 VeraCode 中仍然失败
我很困惑 VeraCode 如何判断它是否存在 SQL 注入风险。
如果您有数据库名称验证,则可以忽略此问题。 https://docs.veracode.com/r/Ignored_Issues