domingo, 7 de agosto de 2011

Uso ESAPI en JSP


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