Estoy leyendo Guía de pruebas OWASP v3 :
Ejemplo 1: Parámetros mágicos
Imagina una aplicación web simple que acepta un par de valor-nombre de "magia" y luego el valor. Para simplificar, la solicitud GET puede ser:
http://www.host/application?magic=value
.Para simplificar aún más el ejemplo, los valores en este caso solo pueden ser caracteres ASCII a - z (mayúsculas o minúsculas) y números enteros de 0 a 9. Los diseñadores de esta aplicación crearon una puerta trasera administrativa durante las pruebas, pero la ofuscaron para evitar El observador casual de descubrirlo. Al enviar el valor
sf8g7sfjdsurtsdieerwqredsgnfg8d
(30 caracteres), el usuario iniciará sesión y se le presentará una pantalla administrativa con el control total de la aplicación. La solicitud HTTP es ahora:http://www.host/application?magic=sf8g7sfjdsurtsdieerwqredsgnfg8d
Dado que todos los otros parámetros eran campos simples de dos y tres caracteres, no es posible comenzar a adivinar combinaciones en aproximadamente 28 caracteres. Un escáner de aplicaciones web necesitará forzar (o adivinar) la totalidad del espacio clave de 30 caracteres. ¡Eso es hasta 30 ^ 28 permutaciones, o billones de solicitudes HTTP! ¡Eso es un electrón en un pajar digital!
El código para esta comprobación ejemplar de Magic Parameter puede tener el siguiente aspecto:
public void doPost( HttpServletRequest request, HttpServletResponse response) { String magic = “sf8g7sfjdsurtsdieerwqredsgnfg8d”; boolean admin = magic.equals( request.getParameter(“magic”)); if (admin) doAdmin( request, response); else .... // normal processing }
Al observar el código, la vulnerabilidad prácticamente salta de la página como un problema potencial.
Como soy un principiante, no veo la vulnerabilidad en el código de inmediato. ¿Alguien podría explicar qué es exactamente lo que está mal con el código?