hibernate 不安全对象绑定Checkmarx

iyr7buue  于 2022-11-24  发布在  其他
关注(0)|答案(2)|浏览(123)

我在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;
    
}
tvmytwxo

tvmytwxo1#

下面是我针对Java中cherkmarx报告的不安全对象绑定的解决方案。这不是一个优雅的方法,只是修复了这个漏洞。

**删除每个requestbody bean中装箱字段的所有setter方法。**由于@JsonProperty可以支持反序列化功能,因此无需手动添加setter。

如果确实需要请求主体bean的setter,可以使用反射方式。FieldUtils.writeField(columnConfigDto , "isVisible", true, true);

public class ColumnConfigDto {
    // Ensure @JsonProperty existed on each field 
    @JsonProperty("key")
    private String key;

    @JsonProperty("isVisible")
    private Boolean isVisible;

    @JsonProperty("list")
    private List list;

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public Boolean getVisible() {
        return isVisible;
    }
    
// Remove boxed type field     
//    public void setVisible(Boolean visible) {
//        isVisible = visible;
//    }

    public List getList() {
        return list;
    }

// Remove boxed type field   
//    public void setList(List list) {
//        this.list = list;
//    }
}
bn31dyow

bn31dyow2#

根据Spring文档,此问题是由@ RequestBody引起的,但@RequestParam没有问题。如果我们将请求正文绑定到没有@RequestBody的对象,则不会发生此问题。
HttpServletRequest request;
mapper.readValue(request.getInputStream(), Product.class);

相关问题