Identificar las limitaciones de la validación basada en listas negras y mitigar vulnerabilidades de inyección SQL implementando un enfoque de validación basado en listas blancas, asegurando que solo se permitan entradas seguras y predefinidas.
Paso 1. Inicia sesión con las siguientes credenciales válidas:
Nombre de usuario: test
Contraseña: test1
Paso 2. Haz clic en el menú LOGOUT
.
Paso 3. Intenta iniciar sesión utilizando los siguientes datos de entrada de inyección SQL:
Nombre de usuario: ' or '1'='1
Contraseña: test1
Resultado:
Confirmación del mecanismo de validación:
Ve a la pestaña LoginController.jsp
, líneas n.º 81-90.
Verás que la entrada se valida utilizando un enfoque de lista negra (Blacklisting Validation Approach), verificando contra ciertos caracteres “maliciosos”.
Problema con el enfoque de lista negra:
Paso 4. Para implementar una validación basada en listas blancas (Whitelist-based Input Validation), ve a la pestaña LoginController.jsp
y reemplaza el código de la función validateUserName() en las líneas n.º 81-89 con el siguiente código:
Pattern p = Pattern.compile("^[a-zA-Z0-9_@.-]*$");
Matcher m = p.matcher(uname);
boolean result = m.matches();
return result;
Paso 5. Haz clic en el botón Save
en la parte superior del editor para guardar los cambios.
Paso 6. Intenta iniciar sesión nuevamente utilizando los datos de entrada de inyección SQL indicados en el paso 3.
Resultado:
Paso 7. Haz clic en el botón Reset
para restaurar el laboratorio al estado anterior y haz clic en OK
en el mensaje emergente que indica ¡Restablecimiento exitoso!
.