<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<title>RE: [OWASP-ESAPI] Implementation of Global Output Encoder with ESAPI</title>
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";
        color:black;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";
        color:black;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";
        color:black;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";
        color:black;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;
        color:black;}
span.EmailStyle20
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
        {page:Section1;}
 /* List Definitions */
 @list l0
        {mso-list-id:2110928876;
        mso-list-type:hybrid;
        mso-list-template-ids:-29088550 67698705 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
        {mso-level-text:"%1\)";
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body bgcolor=white lang=EN-US link=blue vlink=purple>

<div class=Section1>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>I think Jim is on the right track here, I would just say it a
little differently in order to be completely clear.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Today, you have to manually escape all untrusted data before
including it in HTML. That means directly calling escape methods from your HTML
generation code, wherever that might be.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Tomorrow, though, we may get to the point where direct HTML
generation is not necessary. I&#8217;ve been waiting for this for a decade, and
I&#8217;m still optimistic. If you are disciplined enough, you can certainly already
do this today with components, tags, templates, or whatever you decide to call
them.  All you have to do is use the proper escape methods as you&#8217;re
writing out HTML content within the tag.  Oh, and you need a rule that says
developers can&#8217;t generate HTML by hand.  In my experience, this last rule
is where we fall down&#8230;  a lot.<o:p></o:p></span></p>

<div>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>--Jeff<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

</div>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<div>

<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>

<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif";
color:windowtext'>From:</span></b><span style='font-size:10.0pt;font-family:
"Tahoma","sans-serif";color:windowtext'> esapi-user-bounces@lists.owasp.org
[mailto:esapi-user-bounces@lists.owasp.org] <b>On Behalf Of </b>Jim Manico<br>
<b>Sent:</b> Friday, May 14, 2010 1:24 PM<br>
<b>To:</b> Kesavanarayanan, Ramesh<br>
<b>Cc:</b> owasp-esapi@lists.owasp.org; esapi-user@lists.owasp.org; Sebastian
Kübeck<br>
<b>Subject:</b> Re: [Esapi-user] [OWASP-ESAPI] Implementation of Global
OutputEncoder with ESAPI<o:p></o:p></span></p>

</div>

</div>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>Manually encoding all UI inputs is the best we can do today
to catch all display contexts in HTML. But this is only today. The future
involves frameworks that use auto-escaping template technology - but few do it
right.<br>
<br>
The best I have seen are from Google.<br>
<br>
1) <a href="http://googleonlinesecurity.blogspot.com/2009_03_01_archive.html">http://googleonlinesecurity.blogspot.com/2009_03_01_archive.html</a>
(C++ web dev world only)<br>
<br>
2) GPX (Text from a Google AppSec resource I'm in contact with)<br>
<br>
<o:p></o:p></p>

<pre>GXP : <a href="http://code.google.com/p/gxp/">http://code.google.com/p/gxp/</a> .  It's another,<o:p></o:p></pre><pre>older, Google offering on that front that is much closer structurally<o:p></o:p></pre><pre>to JSP and so possibly a better option for someone who has a bunch of<o:p></o:p></pre><pre>broken JSPs and wants to migrate piecemeal to a better system.<o:p></o:p></pre><pre>If someone wants to work around the auto-escaping they can use<o:p></o:p></pre><pre><a
href="http://gxp.googlecode.com/svn/trunk/javadoc/com/google/gxp/html/HtmlClosure.html">http://gxp.googlecode.com/svn/trunk/javadoc/com/google/gxp/html/HtmlClosure.html</a><o:p></o:p></pre><pre>but such exceptions are captured in the java type system which makes<o:p></o:p></pre><pre>auditing them and focusing logging and assertions around them fairly<o:p></o:p></pre><pre>easy.<o:p></o:p></pre><pre>They've done a really bad job documenting and advocating GXP but I've<o:p></o:p></pre><pre>used it and it is really well thought out, easy to use, and feature<o:p></o:p></pre><pre>complete.  <a
href="https://docs.google.com/a/google.com/present/view?id=dcbpz3ck_8gphq8bdt">https://docs.google.com/a/google.com/present/view?id=dcbpz3ck_8gphq8bdt</a><o:p></o:p></pre><pre><o:p>&nbsp;</o:p></pre>

<p class=MsoNormal><br>
<br>
<br>
<br>
<o:p></o:p></p>

<p style='margin-bottom:12.0pt'><span style='font-size:10.0pt'>Thanks for the
input folks. But overall it seems that there is no much we can do for the
output encoding but to change UI level. But again if we decide do so there are
multiple ways to represent data into the UI for example using struts2.0<br>
<br>
1) We can use JSTL &lt;c:out<br>
2) we can simply use ${formname.variablename}<br>
3) we can use display tag<br>
<br>
<br>
So my question is that is there a way we can capture the pageContext and do
something over the print writer? I always feel that with sop many choices there
should be a centralized way to implement these rather than just preventing it
in certain pieces of areas.<br>
<br>
HTH.<br>
<br>
<br>
-----Original Message-----<br>
From: <a href="mailto:owasp-esapi-bounces@lists.owasp.org">owasp-esapi-bounces@lists.owasp.org</a>
on behalf of Sebastian Kübeck<br>
Sent: Sat 5/8/2010 2:57 AM<br>
To: Jim Manico<br>
Cc: <a href="mailto:owasp-esapi@lists.owasp.org">owasp-esapi@lists.owasp.org</a>;
<a href="mailto:esapi-user@lists.owasp.org">esapi-user@lists.owasp.org</a><br>
Subject: Re: [OWASP-ESAPI] Implementation of Global Output Encoder with ESAPI<br>
<br>
+1<br>
<br>
I once watched an experienced pen tester confronted with mod_security.<br>
It added probably half an hour to his work. That was it.<br>
There are just so many ways to trick those filters.<br>
<br>
@Ramesh: Unfortunately, there is really no shortcut that makes your code<br>
safe. The only thing you can do is to escape output context specific in<br>
every JSP page, servlet etc..<br>
<br>
Sebastian Kübeck<br>
<br>
Am 08.05.2010 01:37, schrieb Jim Manico:<br>
&gt;&gt; Jim you are absolutely right - but there are some cases where you need<br>
&gt; the *big hammer* approach.<br>
&gt;<br>
&gt; You are starting to sound like a WAF vendor. I think Imperva is hiring<br>
&gt; for sales....<br>
&gt;<br>
&gt; *ducks*<br>
&gt;<br>
&gt; &lt;soapbox&gt;<br>
&gt; Comon boys - Risk Management is often used to justify NOT doing the<br>
&gt; right thing. Around these parts we OUTPUT ENCODE CONTEXTUALLY FOR ALL<br>
&gt; OUTPUT. NOTHING ELSE STOPS XSS.<br>
&gt; &lt;/soapbox&gt;<br>
&gt;<br>
&gt; Cheers,<br>
&gt; - Jim<br>
&gt;<br>
&gt;<br>
&gt;&gt; Jim you are absolutely right - but there are some cases where you need<br>
&gt;&gt; the *big hammer* approach... I can vouch for that - especially as a<br>
&gt;&gt; means of getting ESAPI into the door and implemented in a bloated and<br>
&gt;&gt; ever evolving enterprise codebase.<br>
&gt;&gt;<br>
&gt;&gt; I am not saying this is the *right* way to do things, and I pointed<br>
&gt;&gt; out in the last part of my reply that while this works for a big<br>
&gt;&gt; hammer approach it is *not* 100% reliable and it is not quite so<br>
&gt;&gt; daunting to carve out sections of a site and implement the tags or<br>
&gt;&gt; scriptlet to do it correctly.. :)<br>
&gt;&gt;<br>
&gt;&gt; Sometimes you gotta prove that something helps when it is used in not<br>
&gt;&gt; quite the 100% quite correct way just to get it in so you can do<br>
&gt;&gt; things correctly... You've worked with stubborn managers before.. *g*<br>
&gt;&gt;<br>
&gt;&gt; On 5/7/2010 5:17 PM, Jim Manico wrote:<br>
&gt;&gt;&gt; &gt;&nbsp; You just create an HttpServletRequestWrapper that
returns the<br>
&gt;&gt;&gt; encoded values.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Beef... Noooooo!<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; I can't agree with that. This filter method only encodes data in
the<br>
&gt;&gt;&gt; HTML body context - leaving all other display contexts vulnerable
to<br>
XSS!<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; I implore you to manually encode each variable per<br>
&gt;&gt;&gt;<br>
<a
href="http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet">http://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet</a><br>
&gt;&gt;&gt; - you can even come up with a few regular expressions to do mass<br>
&gt;&gt;&gt; search-and-replace for some cases.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; My 2 cents,<br>
&gt;&gt;&gt; Jim<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Ramesh - (Please use the ESAPI-USER list - this list is
deprecated.)<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; You just create an HttpServletRequestWrapper that returns the<br>
&gt;&gt;&gt;&gt; encoded values.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; public class MyWrapper extends HttpServletRequestWrapper {<br>
&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp; @Override<br>
&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp; public String getParameter(String key) {<br>
&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br>
&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return
ESAPI.encoder().encodeForHTML( super.getParameter(<br>
&gt;&gt;&gt;&gt; key ) );<br>
&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch ( Exception e ) {<br>
&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
ESAPI.getLogger( &quot;MyWrapper&quot; ).error(<br>
&gt;&gt;&gt;&gt; org.owasp.esapi.Logger.EVENT_FAILURE, &quot;Unable to encode
value&quot;, e );<br>
&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;<br>
&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp; }<br>
&gt;&gt;&gt;&gt; }<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Obviously, this is a overly simplified version, but it conveys
the<br>
&gt;&gt;&gt;&gt; point.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; I am curious what you are going for by re-encoding for HTML,<br>
&gt;&gt;&gt;&gt; HTMLAttribute, CSS, and JS?<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; I understand the desire to not have to make changes to a *ton*
of<br>
&gt;&gt;&gt;&gt; jsps to get this going quickly, and the above works as a good
*big<br>
&gt;&gt;&gt;&gt; hammer* solution to solve most problems quickly, but
ultimately you<br>
&gt;&gt;&gt;&gt; are going to want to make sure that you start implementing the<br>
&gt;&gt;&gt;&gt; encoding correctly in your view code as you go. It is pretty
easy to<br>
&gt;&gt;&gt;&gt; carve out sections of a site and go through that section using
the<br>
&gt;&gt;&gt;&gt; ESAPI tablibs or scriptlet to call the correct one.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Hope this has been helpful.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Thanks<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; On 5/7/2010 2:28 PM, Kesavanarayanan, Ramesh wrote:<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; I have a question on the output encoding using the ESAPI.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; In my application I tried to implement the ESAPI for the
response<br>
&gt;&gt;&gt;&gt;&gt; output encoding in a centralized manner so that I do not
need to<br>
&gt;&gt;&gt;&gt;&gt; change every JSP page in my application.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; The following is the piece of code I have written using my<br>
&gt;&gt;&gt;&gt;&gt; sessionFilter.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; import java.io.CharArrayWriter;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public
void doFilter(ServletRequest request,<br>
&gt;&gt;&gt;&gt;&gt; ServletResponse response,<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
FilterChain chain) throws ServletException,<br>
&gt;&gt;&gt;&gt;&gt; IOException {<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
HttpServletRequest httpRequest =<br>
&gt;&gt;&gt;&gt;&gt; (HttpServletRequest) request;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
HttpServletResponse httpResponse =<br>
&gt;&gt;&gt;&gt;&gt; (HttpServletResponse) response;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
HttpSession session = httpRequest.getSession();<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
ServletResponse newResponse = null;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (request instanceof HttpServletRequest) {<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
newResponse = new CharResponseWrapper(<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
(HttpServletResponse)<br>
&gt;&gt;&gt;&gt;&gt; response);<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
chain.doFilter(request, response);<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
String text = newResponse.toString();<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
text = text.toUpperCase();<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
text = ESAPI.encoder().encodeForHTML(text);<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
text = ESAPI.encoder().encodeForHTMLAttribute(text);<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
text = ESAPI.encoder().encodeForJavaScript(text);<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
text = ESAPI.encoder().encodeForCSS(text);<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
CharArrayWriter caw = new CharArrayWriter();<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (text != null) {<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
try {<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&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;
caw.write(text);<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; response.getWriter().write(caw.toString());<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
} catch (java.lang.IllegalStateException<br>
&gt;&gt;&gt;&gt;&gt; ille) {<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
}<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; In my JSP I have the code as follows<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; *_Not working_*<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; &lt;script&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; function setUserName(){<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
document.getElementById(&quot;login&quot;).value ='&lt;%=<br>
&gt;&gt;&gt;&gt;&gt; (String)request.getAttribute(&quot;username&quot;)&nbsp;
%&gt;';<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; }<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; &lt;/script&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; *_Working_*<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; &lt;%!<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String
cleanXSS(String value) {<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
value = ESAPI.encoder().encodeForHTML(value);<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
value = ESAPI.encoder().encodeForHTMLAttribute(value);<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
value = ESAPI.encoder().encodeForJavaScript(value);<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
value = ESAPI.encoder().encodeForCSS(value);<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
return value;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; %&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; &lt;script&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; function setUserName(){<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
document.getElementById(&quot;login&quot;).value ='&lt;%= cleanXSS(<br>
&gt;&gt;&gt;&gt;&gt; (String)request.getAttribute(&quot;username&quot;)&nbsp; )
%&gt;';<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; }<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; &lt;/script&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; As you can see I expect the response to be updated with
the ESAPI<br>
&gt;&gt;&gt;&gt;&gt; functions, but somewhere I loose the ESAPI. The idea for
me is to<br>
&gt;&gt;&gt;&gt;&gt; centralize the output encoding so that it saves me time
and effort.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Appreciate if you have any pointers on the same.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; */Regards |&nbsp; Ramesh Kesavanarayanan&nbsp;
|&nbsp;&nbsp;&nbsp; 319-354-9200 ext 215785 /<br>
&gt;&gt;&gt;&gt;&gt; 215972 (O)/**//**/ |&nbsp; //* *//**/ 319-621-7641 (M) /*<br>
&gt;&gt;&gt;&gt;&gt;&nbsp; | */_ramesh.kesavanarayanan@pearson.com_/*<br>
&gt;&gt;&gt;&gt;&gt; &lt;<a href="mailto:ramesh.kesavanarayanan@pearson.com">mailto:ramesh.kesavanarayanan@pearson.com</a>&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt;&gt;&gt; OWASP-ESAPI mailing list<br>
&gt;&gt;&gt;&gt;&gt; <a href="mailto:OWASP-ESAPI@lists.owasp.org">OWASP-ESAPI@lists.owasp.org</a><br>
&gt;&gt;&gt;&gt;&gt; <a
href="https://lists.owasp.org/mailman/listinfo/owasp-esapi">https://lists.owasp.org/mailman/listinfo/owasp-esapi</a><br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt;&gt; OWASP-ESAPI mailing list<br>
&gt;&gt;&gt;&gt; <a href="mailto:OWASP-ESAPI@lists.owasp.org">OWASP-ESAPI@lists.owasp.org</a><br>
&gt;&gt;&gt;&gt; <a href="https://lists.owasp.org/mailman/listinfo/owasp-esapi">https://lists.owasp.org/mailman/listinfo/owasp-esapi</a><br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; --<br>
&gt;&gt;&gt; Jim Manico<br>
&gt;&gt;&gt; OWASP Podcast Host/Producer<br>
&gt;&gt;&gt; OWASP ESAPI Project Manager<br>
&gt;&gt;&gt; <a href="http://www.manico.net">http://www.manico.net</a><br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; Jim Manico<br>
&gt; OWASP Podcast Host/Producer<br>
&gt; OWASP ESAPI Project Manager<br>
&gt; <a href="http://www.manico.net">http://www.manico.net</a><br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; OWASP-ESAPI mailing list<br>
&gt; <a href="mailto:OWASP-ESAPI@lists.owasp.org">OWASP-ESAPI@lists.owasp.org</a><br>
&gt; <a href="https://lists.owasp.org/mailman/listinfo/owasp-esapi">https://lists.owasp.org/mailman/listinfo/owasp-esapi</a><br>
<br>
_______________________________________________<br>
OWASP-ESAPI mailing list<br>
<a href="mailto:OWASP-ESAPI@lists.owasp.org">OWASP-ESAPI@lists.owasp.org</a><br>
<a href="https://lists.owasp.org/mailman/listinfo/owasp-esapi">https://lists.owasp.org/mailman/listinfo/owasp-esapi</a></span><o:p></o:p></p>

<p class=MsoNormal><br>
<br>
<br>
<o:p></o:p></p>

<pre>-- <o:p></o:p></pre><pre>Jim Manico<o:p></o:p></pre><pre>OWASP Podcast Host/Producer<o:p></o:p></pre><pre>OWASP ESAPI Project Manager<o:p></o:p></pre><pre><a
href="http://www.manico.net">http://www.manico.net</a><o:p></o:p></pre></div>

</body>

</html>