微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何修复 checkmarx 错误以清理有效负载

如何解决如何修复 checkmarx 错误以清理有效负载

我有一个 spring boot 服务 (2.4.5) 显示一个 checkmarx 错误,我们需要清理请求负载。我们如何清理请求负载

 @ApiOperation(value = "Executes new report. The response contains the new job id.")
@PostMapping(value = "/execute")
public ResponseEntity<MyResponse<Object,Void>> execute(
        @RequestBody final MyInput input) {.......}

对于“@RequestBody final MyInput input”,我收到以下 checkmarx 错误消息:

应用程序的 executeNewReport 方法使用输入执行 sql 查询,位于 src\main\java\com\gayathri\controllers\JobController.java 的第 82 行。应用程序通过在未进行适当清理的情况下将不受信任的字符串嵌入到查询中来构造此 sql 查询。连接的字符串被提交到数据库,在那里它被相应地解析和执行。 这种明显的数据库访问似乎封装在外部组件或 API 中。 因此,攻击者似乎可以通过更改 src\main\java\com\gayathri\controllers\ 的第 75 行的 execute 方法读取的用户输入,将任意数据注入到 sql 查询中。作业控制器.java。该输入然后通过代码流向外部 API,并从那里流向数据库服务器,显然没有经过清理。 根据启发式分析,这可能会启用 sql 注入攻击。

我想清理我的负载。或者没有其他选择,只能使用 DTO ,然后将其转换为我的数据库实体

解决方法

根据漏洞的描述,我假设 Checkmarx 检测到的确切漏洞是“启发式 SQL 注入”。很高兴看到接收器在哪里(漏洞传播的地方)而不仅仅是源(“@RequestBody final MyInput input”)。

第一种方法是使用参数化或准备好的语句,这里有一个来自 OWASP 的 cheatsheet 链接,对您有用

我认为 Checkmarx 还关注的是 encodeForSQL 函数的使用,这将要求您使用 OWASP Enterprise Security API library

如果您使用的是 MySQL:

input = ESAPI.encoder().encodeForSQL(new MySQLCodec(),input);

或适当更改数据库编解码器

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。