我在Checkmarx扫描中收到警告,说saveAll()调用中的对象绑定不安全。checkmarx中的确切内容是-
The columnConfigSet at src\main\java\com\ge\digital\oa\moa\controller\ConfigController.java in line 45 may unintentionally allow setting the value of saveAll in setColumnsConfig, in the object src\main\java\com\ge\digital\oa\moa\service\ConfigService.java at line 170.
有什么想法如何重写代码,使checkmarx停止抱怨。
我的代码:
第一次
下面是我在此代码中使用的DTO对象:
@Getter
@Setter
public class ColumnConfigSetDto {
@JsonProperty("userId")
private String userId;
@JsonProperty("viewName")
private String viewName;
@JsonProperty("columns")
private List<ColumnConfigDto> columns;
}
下面是我的DTO代码,用于此
@Getter
@Setter
public class ColumnConfigDto {
@JsonProperty("key")
private String key;
@JsonProperty("label")
private String label;
@JsonProperty("isVisible")
private Boolean isVisible;
@JsonProperty("position")
private Integer position;
@JsonProperty("isSortable")
private Boolean isSortable;
@JsonProperty("isHideable")
private Boolean isHideable;
}
2条答案
按热度按时间tvmytwxo1#
下面是我针对Java中cherkmarx报告的不安全对象绑定的解决方案。这不是一个优雅的方法,只是修复了这个漏洞。
**删除每个requestbody bean中装箱字段的所有setter方法。**由于
@JsonProperty
可以支持反序列化功能,因此无需手动添加setter。如果确实需要请求主体bean的setter,可以使用反射方式。
FieldUtils.writeField(columnConfigDto , "isVisible", true, true);
bn31dyow2#
根据Spring文档,此问题是由@ RequestBody引起的,但@RequestParam没有问题。如果我们将请求正文绑定到没有@RequestBody的对象,则不会发生此问题。
HttpServletRequest request;
mapper.readValue(request.getInputStream(), Product.class);