Mass Assignment: Insecure Binder Configuration Vulnerability 的解决方案是什么?
What is the solution for Mass Assignment: Insecure Binder Configuration Vulnerability?
我在 Java 中有这个控制器:
@Controller
public class AuthenticationController extends AbstractController {
@RequestMapping(value = Constantes.MAPPING_AUTH_BASE_ASP, method = { RequestMethod.POST })
public String authenticate(@Valid ComunicationWithAspRequest comunicationWithAspRequest, BindingResult result,
RedirectAttributes redirectAttributes, HttpSession sesion) throws Exception {
...
...
...
}
}
当我在 Fortify 中扫描我的代码时,对象 comunicationWithAspRequest 导致批量分配:不安全的 Binder 配置漏洞。是否可以控制哪些 HTTP 请求参数将在绑定过程中使用,哪些将被忽略?
你可以参考问题Prevent mass assignment in Spring MVC with Roo。
在您的情况下,您可以使用 Spring MVC 提供的 @InitBinder。 @InitBinder 将为 json 和 bean 映射指定白名单。
根据我的经验,我使用 @RequestBody 进行自动绑定。我需要添加 @JsonIgnore 来指定不包含在映射中的 属性。
SimpleController.java
@RequestMapping(value="/simple")
public String simple(@Valid @RequestBody User user){
simpleService.doSomething();
}
User.java
public class User{
private String name;
@JsonIgnore
private String dummy;
public void getName(){return name;}
public void setName(name){this.name = name;}
public void getDummy(){return dummy;}
public void setDummy(dummy){this.dummy= dummy;}
}
我在 Java 中有这个控制器:
@Controller
public class AuthenticationController extends AbstractController {
@RequestMapping(value = Constantes.MAPPING_AUTH_BASE_ASP, method = { RequestMethod.POST })
public String authenticate(@Valid ComunicationWithAspRequest comunicationWithAspRequest, BindingResult result,
RedirectAttributes redirectAttributes, HttpSession sesion) throws Exception {
...
...
...
}
}
当我在 Fortify 中扫描我的代码时,对象 comunicationWithAspRequest 导致批量分配:不安全的 Binder 配置漏洞。是否可以控制哪些 HTTP 请求参数将在绑定过程中使用,哪些将被忽略?
你可以参考问题Prevent mass assignment in Spring MVC with Roo。
在您的情况下,您可以使用 Spring MVC 提供的 @InitBinder。 @InitBinder 将为 json 和 bean 映射指定白名单。
根据我的经验,我使用 @RequestBody 进行自动绑定。我需要添加 @JsonIgnore 来指定不包含在映射中的 属性。
SimpleController.java
@RequestMapping(value="/simple")
public String simple(@Valid @RequestBody User user){
simpleService.doSomething();
}
User.java
public class User{
private String name;
@JsonIgnore
private String dummy;
public void getName(){return name;}
public void setName(name){this.name = name;}
public void getDummy(){return dummy;}
public void setDummy(dummy){this.dummy= dummy;}
}