Joven hacker sonriendo

Hackeamos su software

cero falsos positivos

Inteligencia experta + automatización eficaz

Prevenir Cross Site Request Forgery Usando Taglibs

Nuestros ethical hackers explican cómo evitar vulnerabilidades de seguridad mediante la programación segura en Java al prevenir ataques de tipo Cross Site Request Forgery utilizando taglibs de CSRFGuard.Ésto resulta útil cuando se tiene un contenedor de Servlets.

Necesidad

Prevenir ataques CSRF usando taglibs de CSRFGuard en Java EE.

Contexto

A continuación se describen las circunstancias bajo las cuales la siguiente solución tiene sentido:

  1. Se está desarrollando una aplicación Java EE.

  2. Se tiene instalado un contenedor de servlets.

  3. Se desea utilizar la versión v3 de la herramienta CSRFGuard.

  4. Se cuenta con la herramienta CSRFGuard v3 [1] instalada y configurada

  5. Se entiende el ataque CSRF.

Solución

Cross Site Request Forgery o por sus siglas CSRF, es un ataque contra sitios web que fuerza a un usuario, previamente registrado en la aplicación, a ejecutar acciónes de forma no intencionada en la página. Es decir, fuerza al navegador web de la víctima a enviar una petición a una aplicación web vulnerable, entonces, dicha aplicación se encarga de realizar la acción elegida por el atacante a través de la víctima, debido a que la actividad maliciosa será procesada en nombre del usuario legitimo. En pocas palabras, un atacante engaña a un usuario legitimo para que envíe peticiones maliciosas a la aplicación.

Al contrario de los ataques XSS, los cuales explotan la confianza del usuario para con un sitio particular; el Cross Site Request Forgery explota la confianza que un sitio web tiene en un usuario particular.

Se describirá a continuación como emplear la biblioteca CSRFGuard [2] para proteger el recurso accion.html de peticiones no generadas desde formularios de la aplicación, los cuales se encuentran en index.jsp.

  1. Primero, hay que definir aspectos generales de la página como lo es el lenguaje, el tipo de contenido y la forma de codificación. Acto seguido, se incluye el taglib de CSRFGuard, usando como prefijo csrf para que pueda ser utilizado, de forma abreviada, en las líneas siguientes.

    accion.html
    1
    2
    3
    4
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@ taglib uri="http://www.owasp.org/index.php/Category:OWASP_CSRFGuard_Project/Owasp.CsrfGuard.tld"
       prefix="csrf" %>
    <html>
    
  2. En el primer formulario, se debe incluir un campo oculto cuyo nombre y valor serán generados dinámicamente por la biblioteca.

    1
    2
    3
    4
    5
    6
    7
    8
    <h3> Formulario protegido </h3>
    <form id="formTest1" name="formTest1" action="accion.html">
      <input type="text" name="text" value="text"/>
      <input type="submit" name="submit" value="submit"/>
      <input type="hidden" name="<csrf:token-name/>"
        value='<csrf:token-value uri="accion.html"/>' />
    </form>
    <br />
    
  3. El segundo formulario se define usando el taglib csrf:form, el cual, automáticamente, se encarga de agregar un campo oculto análogo al del primer formulario.

    1
    2
    3
    4
    5
    6
    <h3> Formulario protegido </h3>
    <csrf:form id="formTest2" name="formTest2" action="accion.html">
      <input type="text" name="text" value="text"/>
      <input type="submit" name="submit" value="submit"/>
    </csrf:form>
    <br />
    
  4. Ambos formularios intentarán hacer una petición GET a accion.html enviando el campo oculto que permitirá comprobar la validez de la solicitud.

  5. Finalmente se cierran los tags aún abiertos

    1
    2
     </body>
    </html>
    
  6. Examinando el código fuente generado para los formularios, se puede apreciar el valor de los campos ocultos.

formulario



Haz un comentario

Estado de los servicios - Términos de Uso