Как исправить OverPosting в Spring Boot Rest Api с помощью параметра @RequestBody Json request? - PullRequest
0 голосов
/ 03 июля 2019

У меня есть драйвер, который не настроен для ограничения того, какие атрибуты запроса могут быть сопоставлены с моделью, поэтому этот метод можно использовать для выполнения атак 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...