Anotación @RequestBody

INTEGRIDAD

Los parámetros anotados con @RequestBody por defecto son requeridos, a no ser que se indique lo contrario a través del atributo required = false de la anotación @RequestBody.

Este requisito corrige las vulnerabilidades

  • Command Injection

  • Cross-Site Scripting (XSS)

  • Unvalidated Redirects and Forwards

  • Insufficient Attack Protection

  • Underprotected APIs

Descripción

Spring comprueba que los parámetros RequestBody requeridos estén presentes en la petición y no sean null ni vacío ni en blanco. Por tanto, no es necesario anotar los parámetros request body con @NotNull, @NotEmpty, ni @NotBlank.
Si se indica que un parámetro RequestBody es opcional mediante el atributo required = false de la anotación @RequestBody, pero a su vez se anota con @NotNull, @NotEmtpy, @NotBlank, o es de tipo primitivo, el comportamiento será completamente similar a si el parámetro fuera requerido.

Ejemplo correcto

/** * Ejemplo de parámetro RequestBody requerido de tipo genérico. * * @param requestBody * Parámetro RequestBody requerido de tipo genérico. * @return Response entity con el valor del request body de entrada. */ @RequestMapping(value = "/required-request-body-generic", method = RequestMethod.POST) public ResponseEntity<Map<String, Object>> requiredRequestBodyGeneric( @RequestBody Long requestBody) { ... } /** * Ejemplo de parámetro RequestBody opcional de tipo genérico. * * @param requestBody * Parámetro RequestBody opcional de tipo genérico. * @return Response entity con el valor del request body de entrada. */ @RequestMapping(value = "/optional-request-body-generic", method = RequestMethod.POST) public ResponseEntity<Map<String, Object>> optionalRequestBodyGeneric( @RequestBody(required = false) Long requestBody) { ... }

Cumplimiento de estándares y normativas

OWASP

OWASP [Top10/2016] A1 - Injection (in part)
OWASP [Top10/2016] A3 - Cross Site Scripting (XSS) (in part)
OWASP [Top10/2016] A10 - Unvalidated Redirects and Forwards
OWASP [Top10/2017] A7 - Insufficient Attack Protection
OWASP [Top10/2017] A10 - Underprotected APIs

Referencias

OWASP Top 10 Proactive Controls 2016:
https://www.owasp.org/index.php/OWASP_Proactive_Controls#tab=OWASP_Proactive_Controls_2016

OWASP Top 10 Proactive Controls 2016 Mapping:
https://www.owasp.org/index.php/OWASP_Proactive_Controls#tab=Top_10_Mapping_2016

OWASP Top 10 2017:
https://www.owasp.org/index.php/Top_10_2017-Top_10