У меня есть драйвер, который не настроен для ограничения того, какие атрибуты запроса могут быть сопоставлены с моделью, поэтому этот метод можно использовать для выполнения атак OverPosting или UnderPosting.
Я не хочучто в критически важное приложение я помещаю параметры, которые не хочу хранить или изменять в BD.
В проектах без отдыха я видел, что они решаются с помощью метода @InitBinder и настраиваются с помощью "setDisallowedFields", "setAllowedFields "и" setRequiredFields ", но при использовании параметра json @RequestBody, сопоставленного с DTO, я не могу сделать ограничение, плюс у меня есть несколько контроллеров, которые получают разные атрибуты из одного и того же DTO
DTO
public class ImagenAyudaDTO implements Serializable {
private static final long serialVersionUID = 1L;
private Integer idImagenAyuda;
private String urlImagen;
private String estado;}
Контроллер
@PostMapping(path = "/getdto")
public ResponseEntity<ImagenAyudaDTO> getDto(
@RequestBody(required = true) @Valid ImagenAyudaDTO i
) {
Logger.info("getDto request " + i.toString());
ImagenAyudaDTO im = new ImagenAyudaDTO();
im.setEstado("D");
im.setIdImagenAyuda(new Integer(2));
im.setUrlImagen("https://start.spring.io/");
Logger.info("getDto Response " + im.toString());
return new ResponseEntity<ImagenAyudaDTO>(im, HttpStatus.OK);
}
Binder
@InitBinder
public void filterGetdto(WebDataBinder dataBinder) {
final String[] DISALLOWED_FIELDS = new String[] { "estado" };
final String[] ALLOWED_FIELDS = new String[] { "idImagenAyuda", "urlImagen" };
final String[] REQUIRED_FIELDS = new String[] { "idImagenAyuda", "urlImagen" };
dataBinder.setDisallowedFields(DISALLOWED_FIELDS);
dataBinder.setAllowedFields(ALLOWED_FIELDS);
dataBinder.setRequiredFields(REQUIRED_FIELDS);
}
Запрос от почтальона Запрос от Почтальона
Я надеюсь, что у меня будет проверка типа связующего, которая отключит меня от полей DTO, которые не должны использоваться в запросе.Уэст, учитывая, что в одном классе у меня может быть несколько контроллеров, использующих один и тот же DTO