根据CWE-89的推荐,我的以下功能已被参数化,但Veracode仍报告该功能可用CWE-89。
如您所见,该函数用于基于输入参数生成动态SQL查询。而且,只有 @PrimaryValue参数来自用户输入,而其他动态变量则位于SELECT,FROM,JOIN,ON和WHERE后面从数据库中查询(而不是从用户输入中查询)。
您如何看待这种情况?我可以为此提出缓解建议,还是必须多修改代码来解决问题?请给我建议。
答案 0 :(得分:0)
您的代码有SQL注入问题。例如,用户可以将如下参数传递给此方法,参数“ intofile”:
* FROM Table1; DROP TABLE table2; intofile
使用此代码,用户可以将您的查询转换为3个查询,并在运行后将table2删除。
首先,您必须在只读事务中运行查询。之后,您必须对所有输入使用SQL转义方法以从中删除诸如DROP之类的关键字。