Предположим, у нас есть этот компонент
public class Bean {
@NotBlank(groups = {CheckForEmployee.class, CheckForAdmins.class})
private String sth1;
@NotBlank(groups = {CheckForAdmins.class})
private String sth2;
//getters and setters
}
Теперь в пользовательском интерфейсе сотрудника есть что-то вроде этого:
<input name="sth1" type="text" />
, и это для администратора:
<input name="sth1" type="text" />
<input name="sth2" type="text" />
Мы все знаем, что фреймворки, такие как Spring, могут связывать эти значения с объектом Bean, например, в Spring у нас есть что-то вроде этого:
public ModelAndView method1 (@Validated({CheckForEmployee.class})@ModelAttribute Bean bean){...}
//For Employee
AND
public ModelAndView method2 (@Validated({CheckForAdmin.class})@ModelAttribute Bean bean){...}
//For Admin
Теперь возникает вопрос: если злонамеренный сотрудник Имейте в виду, что есть поле с именем "sth2" для администраторов. Он может сгенерировать почтовый запрос вручную и поставить значение для sth2 и отправить егона сервер.
Spring будет связывать это значение, потому что:
- Поле внутри класса Bean
- Нет проверки для sth2 для сотрудников
Каково ваше решение для этого?
Предположим, CSRF отключен, и мы все еще хотим использовать пружинное связывание