security - 为什么我的函数参数化后 Veracode 仍然报告 CWE-89?
问题描述
根据 CWE-89 的推荐,我下面的函数已经被参数化,但 Veracode 仍然报告 CWE-89 在该函数中可用。
如您所见,该函数用于根据输入参数生成动态 SQL 查询。而且,只有@PrimaryValue 参数来自用户输入,而SELECT、FROM、JOIN、ON 和 WHERE 后面的其他动态变量是从数据库中查询的(而不是来自用户输入)。
你怎么看这个案子?我可以为此提出缓解措施还是我必须更多地修改代码来解决问题?请给我建议。
解决方案
您的代码存在 SQL 注入问题。例如用户可以传递给这个方法,参数“intofile”是这样的:
* FROM Table1; DROP TABLE table2; intofile
使用此代码,用户将您的查询转换为 3 个查询,并在运行后将 table2 删除。
首先,您必须在只读事务中运行查询。之后,您必须对所有输入使用 SQL 转义方法以从中删除 DROP 等关键字。
推荐阅读
- html - Mailchimp 中的自定义代码有问题
- java - MongoDB Android SDK不断抛出消息长度错误
- python - 有问题的字符串参数 ctypes python 与 C 代码
- dockerfile - 如何安装编码器服务器的扩展?
- python - Python:如何使用 xpath 或 css 选择器提取排名列数据?
- reactjs - 如果使用另一个可选道具,我可以将 Typescript 必需道具更改为不需要吗?
- python - IndexError:索引 2245 超出轴 0 的范围,大小为 2245
- java - 在querydsl中,FROM子句中的子查询是如何执行的?
- python - 在定义之前引用一个类
- android - 使用伴奏导航动画时如何在 Jetpack Compose 中隐藏底栏