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) |
---|
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