首页 > 解决方案 > 为什么我的函数参数化后 Veracode 仍然报告 CWE-89?

问题描述

根据 CWE-89 的推荐,我下面的函数已经被参数化,但 Veracode 仍然报告 CWE-89 在该函数中可用。

如您所见,该函数用于根据输入参数生成动态 SQL 查询。而且,只有@PrimaryValue 参数来自用户输入,而SELECT、FROM、JOIN、ON 和 WHERE 后面的其他动态变量是从数据库中查询的(而不是来自用户输入)。

你怎么看这个案子?我可以为此提出缓解措施还是我必须更多地修改代码来解决问题?请给我建议。

在此处输入图像描述

标签: securitysql-injectionveracode

解决方案


您的代码存在 SQL 注入问题。例如用户可以传递给这个方法,参数“intofile”是这样的:

* FROM Table1; DROP TABLE table2; intofile

使用此代码,用户将您的查询转换为 3 个查询,并在运行后将 table2 删除。

首先,您必须在只读事务中运行查询。之后,您必须对所有输入使用 SQL 转义方法以从中删除 DROP 等关键字。


推荐阅读