Какое решение для массового назначения: уязвимость конфигурации небезопасного связывателя?

У меня есть этот контроллер в 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 вызывает массовое назначение: уязвимость конфигурации небезопасного связывателя. Можно ли контролировать, какие параметры HTTP-запроса будут использоваться в процессе привязки, а какие будут игнорироваться?


person Brayan Reyes    schedule 19.10.2017    source источник


Ответы (1)


Вы можете обратиться к проблеме Предотвратить массовое назначение в Spring MVC с помощью Roo.

В вашем случае вы можете использовать @InitBinder, предоставляемый Spring MVC. @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;}

}
person Ben Cheng    schedule 06.11.2017
comment
Я искал решение для той же проблемы с массовым назначением, белый и черный список - утомительная задача для моего приложения. Есть ли другой способ исправить это, кроме spring @InitBinder? - person Shibina EC; 14.06.2018
comment
В моем проекте я просто использую грязный способ решения этой проблемы. т.е. @JsonIgnore - person Ben Cheng; 15.06.2018
comment
Я попробовал JsonView, который работает для моего проекта больше, чем JsonIgnore, поскольку объекты используются более чем для одной конечной точки. Тем не менее, Fortify, похоже, не распознает его. - person bourne2program; 18.01.2019
comment
Еще один вывод заключается в том, что Fortify на самом деле просто выполняет сканирование, чтобы выдать вам предупреждение. Какая-то проблема может быть не решена, нужно просто принять ее разумно. - person Ben Cheng; 19.01.2019
comment
В моем проекте я использовал что-то вроде @JsonIgnoreProperties(ignoreUnknown=true) - person viveknaskar; 10.07.2019
comment
Может ли @JsonIgnoreProperties(ignoreUnknown=true) решить проблему в укреплении? - person Ben Cheng; 10.07.2019
comment
@BenCheng Есть ли какое-либо решение для приложения весенней загрузки для этой проблемы? - person mvm; 01.10.2019
comment
@nvm, насколько я знаю, будет применено то же решение. - person Ben Cheng; 04.10.2019
comment
@BenCheng Я реализовал InitBinder в контроллере и JsonIgnoreProperties в Bean, но проблема остается в fortify. Есть ли какой вариант решить эту проблему? - person mvm; 08.10.2019