<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html; charset=ISO-8859-1"
 http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Ramesh - (Please use the ESAPI-USER list - this list is deprecated.)<br>
<br>
You just create an HttpServletRequestWrapper that returns the encoded
values.<br>
<br>
public class MyWrapper extends HttpServletRequestWrapper {<br>
&nbsp;&nbsp; @Override<br>
&nbsp;&nbsp; public String getParameter(String key) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ESAPI.encoder().encodeForHTML( super.getParameter( key
) );<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch ( Exception e ) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ESAPI.getLogger( "MyWrapper" ).error(
org.owasp.esapi.Logger.EVENT_FAILURE, "Unable to encode value", e );<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;<br>
&nbsp;&nbsp; }<br>
}<br>
<br>
Obviously, this is a overly simplified version, but it conveys the
point. <br>
<br>
I am curious what you are going for by re-encoding for HTML,
HTMLAttribute, CSS, and JS?<br>
<br>
I understand the desire to not have to make changes to a *ton* of jsps
to get this going quickly, and the above works as a good *big hammer*
solution to solve most problems quickly, but ultimately you are going
to want to make sure that you start implementing the encoding correctly
in your view code as you go. It is pretty easy to carve out sections of
a site and go through that section using the ESAPI tablibs or scriptlet
to call the correct one. <br>
<br>
Hope this has been helpful. <br>
<br>
Thanks <br>
<br>
On 5/7/2010 2:28 PM, Kesavanarayanan, Ramesh wrote:
<blockquote
 cite="mid:A94809599F3A1E41B0BC7AA9823ED8FE02DDF984@usiowacncspmx01.NCSP.PEROOT.COM"
 type="cite">
  <meta http-equiv="Content-Type"
 content="text/html; charset=ISO-8859-1">
  <meta name="Generator"
 content="MS Exchange Server version 6.5.7654.12">
  <title>RE: Implementation of Global Output Encoder with ESAPI</title>
<!-- Converted from text/rtf format -->
  <p dir="LTR"><span lang="en-us"></span></p>
  <p dir="LTR"><span lang="en-us"></span><span lang="en-us"><font
 size="2" face="Arial">I have a question on the output encoding using
the ESAPI.</font></span></p>
  <p dir="LTR"><span lang="en-us"><font size="2" face="Arial">In my
application I tried to implement the ESAPI for the response output
encoding in a centralized manner so that I do not need to change every
JSP page in my application.</font></span></p>
  <p dir="LTR"><span lang="en-us"><font size="2" face="Arial">The
following is the piece of code I have written using my sessionFilter.</font></span></p>
  <p dir="LTR"><span lang="en-us"><font size="2" face="Arial">import
java.io.CharArrayWriter;</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font size="2" face="Arial">public
void doFilter(ServletRequest request, ServletResponse response,</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font
 size="2" face="Arial">FilterChain chain) throws ServletException,
IOException {</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font size="2"
 face="Arial">HttpServletRequest httpRequest = (HttpServletRequest)
request;</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font size="2"
 face="Arial">HttpServletResponse httpResponse = (HttpServletResponse)
response;</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font size="2"
 face="Arial">HttpSession session = httpRequest.getSession();</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font size="2"
 face="Arial">ServletResponse newResponse = null;</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font size="2"
 face="Arial">if (request instanceof HttpServletRequest) {</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font
 size="2" face="Arial">newResponse = new CharResponseWrapper(</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font size="2" face="Arial">(HttpServletResponse) response);</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font size="2"
 face="Arial">}</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font size="2"
 face="Arial">chain.doFilter(request, response);</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font size="2"
 face="Arial">String text = newResponse.toString();</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font size="2"
 face="Arial">text = text.toUpperCase();</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font size="2"
 face="Arial">text = ESAPI.encoder().encodeForHTML(text);</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font size="2"
 face="Arial">text = ESAPI.encoder().encodeForHTMLAttribute(text);</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font size="2"
 face="Arial">text = ESAPI.encoder().encodeForJavaScript(text);</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font size="2"
 face="Arial">text = ESAPI.encoder().encodeForCSS(text);</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font size="2"
 face="Arial">CharArrayWriter caw = new CharArrayWriter();</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font size="2"
 face="Arial">if (text != null) {</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font
 size="2" face="Arial">try {</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font
 size="2" face="Arial">caw.write(text);</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font
 size="2" face="Arial">response.getWriter().write(caw.toString());</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font
 size="2" face="Arial">} catch (java.lang.IllegalStateException ille) {</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font
 size="2" face="Arial">}</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font size="2"
 face="Arial">}</font></span></p>
  <p dir="LTR"><span lang="en-us"><font size="2" face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></span></p>
  <p dir="LTR"><span lang="en-us"><font size="2" face="Arial">In my JSP
I have the code as follows</font></span></p>
  <p dir="LTR"><span lang="en-us"></span><span lang="en-us"><b><u><font
 size="2" face="Arial">Not working</font></u></b></span></p>
  <p dir="LTR"><span lang="en-us"></span><span lang="en-us"><font
 size="2" face="Arial">&lt;script&gt;</font></span></p>
  <p dir="LTR"><span lang="en-us"><font size="2" face="Arial">function
setUserName(){</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font size="2" face="Arial">
document.getElementById("login").value ='&lt;%=
(String)request.getAttribute("username")&nbsp; %&gt;';</font></span></p>
  <p dir="LTR"><span lang="en-us"><font size="2" face="Arial">}</font></span></p>
  <p dir="LTR"><span lang="en-us"><font size="2" face="Arial">&lt;/script&gt;</font></span></p>
  <p dir="LTR"><span lang="en-us"></span><span lang="en-us"><b><u><font
 size="2" face="Arial">Working</font></u></b></span></p>
  <p dir="LTR"><span lang="en-us"></span><span lang="en-us"><font
 size="2" face="Arial">&lt;%!</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font size="2" face="Arial">String
cleanXSS(String value) {</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font size="2"
 face="Arial">value = ESAPI.encoder().encodeForHTML(value);</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font size="2"
 face="Arial">value = ESAPI.encoder().encodeForHTMLAttribute(value);</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font size="2"
 face="Arial">value = ESAPI.encoder().encodeForJavaScript(value);</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font size="2"
 face="Arial">value = ESAPI.encoder().encodeForCSS(value);</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font size="2"
 face="Arial">return value;</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font size="2" face="Arial">}</font></span></p>
  <p dir="LTR"><span lang="en-us"><font size="2" face="Arial">%&gt;</font></span></p>
  <p dir="LTR"><span lang="en-us"></span><span lang="en-us"></span></p>
  <p dir="LTR"><span lang="en-us"></span><span lang="en-us"><font
 size="2" face="Arial">&lt;script&gt;</font></span></p>
  <p dir="LTR"><span lang="en-us"><font size="2" face="Arial">function
setUserName(){</font></span></p>
  <p dir="LTR"><span lang="en-us">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font size="2" face="Arial">
document.getElementById("login").value ='&lt;%= cleanXSS(&nbsp;
(String)request.getAttribute("username")&nbsp; ) %&gt;';</font></span></p>
  <p dir="LTR"><span lang="en-us"><font size="2" face="Arial">}</font></span></p>
  <p dir="LTR"><span lang="en-us"><font size="2" face="Arial">&lt;/script&gt;</font></span></p>
  <p dir="LTR"><span lang="en-us"><font size="2" face="Arial">As you
can see I expect the response to be updated with the ESAPI functions,
but somewhere I loose the ESAPI. The idea for me is to centralize the
output encoding so that it saves me time and effort.</font></span></p>
  <p dir="LTR"><span lang="en-us"><font size="2" face="Arial">Appreciate
if you have any pointers on the same.</font></span></p>
  <p dir="LTR"><span lang="en-us"></span><span lang="en-us"></span></p>
  <p dir="LTR"><span lang="en-us"></span><span lang="en-us"></span><b><i><span
 lang="en-us"><font size="2" color="#008080" face="Arial">Regards |&nbsp;
Ramesh Kesavanarayanan&nbsp; |&nbsp;&nbsp; &nbsp;319-354-9200 ext 215785 / 215972 (O)</font></span></i></b><span
 lang="en-us"></span><span lang="en-us"></span><b><i><span lang="en-us"></span></i></b><span
 lang="en-us"></span><span lang="en-us"></span><b><i><span lang="en-us">
  <font size="2" color="#008080" face="Arial">|&nbsp; /</font></span></i></b><span
 lang="en-us"></span><span lang="en-us"></span><span lang="en-us"><font
 size="2" color="#008080" face="Arial">&nbsp;</font></span><span lang="en-us"></span><span
 lang="en-us"></span><b><i><span lang="en-us"></span></i></b><span
 lang="en-us"></span><span lang="en-us"></span><b><i><span lang="en-us">
  <font size="2" color="#008080" face="Arial">319-621-7641 (M)&nbsp;</font></span></i></b><span
 lang="en-us"></span><span lang="en-us"></span><span lang="en-us"></span><span
 lang="en-us"></span><span lang="en-us"></span><span lang="en-us"> <font
 size="2" color="#008080" face="Arial">&nbsp;|&nbsp;</font></span><span
 lang="en-us"></span><a moz-do-not-send="true"
 href="mailto:ramesh.kesavanarayanan@pearson.com"><span lang="en-us"></span><span
 lang="en-us"></span><b><i><u><span lang="en-us"><font size="2"
 color="#0000ff" face="Arial">ramesh.kesavanarayanan@pearson.com</font></span></u></i></b><span
 lang="en-us"></span></a><span lang="en-us"></span><span lang="en-us"></span></p>
  <p dir="LTR"><span lang="en-us"></span></p>
  <pre wrap="">
<fieldset class="mimeAttachmentHeader"></fieldset>
_______________________________________________
OWASP-ESAPI mailing list
<a class="moz-txt-link-abbreviated" href="mailto:OWASP-ESAPI@lists.owasp.org">OWASP-ESAPI@lists.owasp.org</a>
<a class="moz-txt-link-freetext" href="https://lists.owasp.org/mailman/listinfo/owasp-esapi">https://lists.owasp.org/mailman/listinfo/owasp-esapi</a>
  </pre>
</blockquote>
</body>
</html>