Prevenir un posible ataque de Denegación de Servicio (DoS) causado por una recursión infinita, implementando un control adecuado sobre la entrada del usuario y el uso de un bloque try-catch para manejar excepciones y evitar un StackOverflowError.
Paso 1:
Haz clic en el menú Blog.
Paso 2:
Para imprimir el artículo, desplázate hacia abajo, ingresa el valor 1 en el cuadro de texto “Enter No. of copies to Print” y haz clic en el botón “print”.
Paso 3:
Haz clic en Back.
Paso 4:
Haz clic nuevamente en el menú Blog. Esta vez, ingresa un valor inválido, como -1, en el cuadro de texto “Enter No. of copies to Print” y haz clic en el botón “print”.
Confirmación de la vulnerabilidad de recursión infinita:
Ve a la pestaña Print.jsp, línea n.º 13. Allí notarás que:
Un bloque try-catch puede capturar cualquier excepción mientras se ejecuta el bucle for y evitar así la recursión infinita que podría provocar un ataque de DoS.
Paso 5:
Para evitar un ataque DoS, implementa un bloque try-catch antes de ejecutar el bucle.
<%
String p = request.getParameter("print");
try {
int pageno = Integer.parseInt(p);
if (pageno < 0) {
out.println("<center><div style='color:red;text-align:center;font-size:larger;'>Please Enter valid Number <a href='index.jsp'>Back..!</a></div></center>");
} else {
out.println("<center><div style='color:green;text-align:center;font-size:larger;'>Document successfully Printed!! <a href='index.jsp'> Back..! </a></div></center>");
}
} catch (Throwable th) {
out.println("<center><div style='color:red;text-align:center;font-size:larger;'>Please Enter valid Number <a href='index.jsp'> Back..! </a></div></center>");
}
%>
Paso 6:
Haz clic en el botón Save en la parte superior del editor para guardar los cambios.
Paso 7:
Repite los pasos 1 y 4.
Paso 8:
Haz clic en el botón Reset para restaurar el laboratorio al estado anterior y selecciona OK en el mensaje emergente que indica “Reset Successful!”.
Paso 9:
Haz clic en el botón HOME para volver a la página principal.