Buenas noches, les comparto algunos ejemplos de como utilizar ESAPI en los jsp. Saludos.
En los JSP se harán los imports de ESAPI y esto va al inicio del jsp.
<%@page import="org.owasp.esapi.ESAPI" %>
Lo siguiente es encontrar el contexto de la solicitud con
String context = request.getContextPath();
En el head del jsp indicaremos la ubicación de los siguientes js: log4js.js, esapi.js, ESAPI_Standard_en_US.properties.js, Base.esapi.properties.js.
<!-- esapi4js dependencies --> <script type="text/javascript" language="JavaScript" src="<%=context%>/esapi4js/lib/log4js.js"></script> <!-- esapi4js core --> <script type="text/javascript" language="JavaScript" src="<%=context%>/esapi4js/esapi.js"></script> <!-- esapi4js i18n resources --> <script type="text/javascript" language="JavaScript" src="<%=context%>/esapi4js/resources/i18n/ESAPI_Standard_en_US.properties.js"></script> <!-- esapi4js configuration --> <script type="text/javascript" language="JavaScript" src="<%=context%>/esapi4js/resources/Base.esapi.properties.js"></script> <script type="text/javascript" language="JavaScript"> // Initialize the api org.owasp.esapi.ESAPI.initialize(); // Using the logger $ESAPI.logger('ApplicationLogger').info( org.owasp.esapi.Logger.EventType.EVENT_SUCCESS, 'This is a test'); </script>
En la documentación indica que deben agregarse en este orden esapi4js dependencies, esapi4js i18n resources, esapi4js configuration, esapi4js core pero en la práctica se realizó en el siguiente orden: esapi4js dependencies, esapi4js core, esapi4js i18n resources, esapi4js configuration
Se usara ESAPI.encode().encodeForHTML(request.getParameter(“ALGO”)) en el documento HTML mientras que en las funciones javascript se puede emplear $ESAPI.encode().encodeForHTML(“DATOS NO CONFIABLES”) o ESAPI.encode().encodeForJavaScript(“DATOS NO CONFIABLES”)
Dentro de un input existen se llama un getParameter por lo que aquí es inseguro colocarlo, utilizamos ESAPI para no permitir ataques XSS
<input type="text" name="t" value="<%=ESAPI.encoder().encodeForHTML(request.getParameter("t")==null?"": request.getParameter("t"))%>">
En una función de JavaScript utilizamos ESAPI para usar elementos del HTML, se puede también utilizar $ESAPI.encoder().encodeForHTML(“DATOS NO CONFIABLES”) para prevenir ataques XSS
<script> function funcion(){ algo.innerHTML=$ESAPI.encoder().encodeForHTML( document.myForm.t.value); } </script>
En cualquier parte del HTML donde se utilice alguna función JavaScript se puede incorporar ESAPI.
Nota 2:
Si permite CUALQUIER entrada no confiable de usuarios dentro de las funciones JavaScript: document.write() o eval(), aun podría ejecutarse los XSS incluso después de hacer la limpieza de estos datos usando las funciones ESAPI: encodeForJavaScript() o encodeForHTML(). La razón es que los caracteres hexadecimales escapados son convertidos de nuevo a caracteres normales en el tiempo de ejecución de estas funciones.
No hay comentarios:
Publicar un comentario