我们正在使用 Spring Boot 应用程序来开发 API 项目。而且它也有招摇的感觉。 我们使用 Checkmarx 来识别项目中的漏洞。 在资源方法中我们使用@GetMapping。 使用 @GetMapping 和 @PostMapping 会导致“关键资源的权限分配不正确”
@RestController
@RequestMapping("/test")
@Tag(name = "User Details")
public class UserDataController {
private static final Logger LOGGER = ESAPI.getLogger(UserDataController.class);
@Operation(summary = "Get Details", tags = { "User Details" })
@GetMapping(path = "/v1.3/userData")
public ResponseEntity<UserDataResponseV3> getUserDataV3(
@RequestParam(value = "changeFromDate", required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:Ss.SSS") LocalDate changeFromDate,
@RequestParam(value = "changeToDate", required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:Ss.SSS") LocalDate changeToDate) {
LOGGER.info(Logger.EVENT_SUCCESS,
"Request processing for UserDataController.getUserDataV3() execution Started");
LOGGER.debug(Logger.EVENT_SUCCESS, "userData Criteria-> from " + changeFromDate + " to {}" + changeToDate);
LOGGER.info(Logger.EVENT_SUCCESS,
"Request processing for UserDataController.getUserDataV3() execution Ended");
return new ResponseEntity<>(userData, HttpStatus.OK);
}
}
在 Checkmarx 报告中,以下是列出的漏洞。
通过路径在文件系统上创建文件 src/main/java/com/test/codes/controller/UserDataController.java 位于 第 202 行具有潜在危险的权限。
我通过谷歌发现了这个问题,因为我目前面临着完全相同的问题。
我分析了我们这边的问题,并注意到 Checkmarx 似乎将其标记为一个发现,因为注释中存在
path
参数。
只需删除
path
参数,或用 path
替换 value
参数(它们是彼此的别名)即可解决问题。
结果:
@GetMapping(path = "/v1.3/userData")
没有发现任何结果:
@GetMapping("/v1.3/userData")
@GetMapping(value = "/v1.3/userData")
希望这可以帮助将来面临同样问题并偶然发现这个问题的其他人。