Anotación @Validated
INTEGRIDAD
Las clases anotadas con @RestController deben estar anotadas con @Validated. De lo contrario, Spring no tendrá en cuenta las anotaciones que se utilicen sobre los parámetros de entrada de los métodos del controlador.
Este requisito corrige las vulnerabilidades
Command Injection
Cross-Site Scripting (XSS)
Unvalidated Redirects and Forwards
Insufficient Attack Protection
Underprotected APIs
Ejemplo incorrecto
@RestController
@RequestMapping("/missing-validated-annotation")
// Falta @Validated
public class MissingValidatedAnnotationController {
/**
* Ejemplo de validaciones de entrada ignoradas al no estar presente la anotación
* @Validated en el controlador.
*
* @param longParam
* Parámetro de tipo Long.
* @param stringParam
* Parámetro de tipo String.
* @return Response entity con los valores de los parámetros de entrada.
*/
@RequestMapping(value = "/ignored-input-validations", method = RequestMethod.GET)
public ResponseEntity<Map<String, Object>> ignoredInputValidations(
@RequestParam(name = "long-param", required = false, defaultValue = "4") @Min(5) @Max(10) Long longParam,
@RequestParam(name = "string-param", required = false, defaultValue = "aaa") @Size(max = 2) @Email String stringParam) {
Map<String, Object> ret = new LinkedHashMap<>();
ret.put("long-param", longParam);
ret.put("string-param", stringParam);
return new ResponseEntity<>(ret, HttpStatus.OK);
}
}
Ejemplo correcto
@RestController
@RequestMapping("/input-validation-examples")
@Validated // Esta anotación garantiza que se aplican los controles de validación.
public class InputValidationExamplesController {
...
}
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