<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:x="urn:schemas-microsoft-com:office:excel" xmlns:p="urn:schemas-microsoft-com:office:powerpoint" xmlns:a="urn:schemas-microsoft-com:office:access" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema" xmlns:b="urn:schemas-microsoft-com:office:publisher" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet" xmlns:odc="urn:schemas-microsoft-com:office:odc" xmlns:oa="urn:schemas-microsoft-com:office:activation" xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:q="http://schemas.xmlsoap.org/soap/envelope/" xmlns:rtc="http://microsoft.com/officenet/conferencing" xmlns:D="DAV:" xmlns:Repl="http://schemas.microsoft.com/repl/" xmlns:mt="http://schemas.microsoft.com/sharepoint/soap/meetings/" xmlns:x2="http://schemas.microsoft.com/office/excel/2003/xml" xmlns:ppda="http://www.passport.com/NameSpace.xsd" xmlns:ois="http://schemas.microsoft.com/sharepoint/soap/ois/" xmlns:dir="http://schemas.microsoft.com/sharepoint/soap/directory/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:dsp="http://schemas.microsoft.com/sharepoint/dsp" xmlns:udc="http://schemas.microsoft.com/data/udc" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sub="http://schemas.microsoft.com/sharepoint/soap/2002/1/alerts/" xmlns:ec="http://www.w3.org/2001/04/xmlenc#" xmlns:sp="http://schemas.microsoft.com/sharepoint/" xmlns:sps="http://schemas.microsoft.com/sharepoint/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:udcs="http://schemas.microsoft.com/data/udc/soap" xmlns:udcxf="http://schemas.microsoft.com/data/udc/xmlfile" xmlns:udcp2p="http://schemas.microsoft.com/data/udc/parttopart" xmlns:wf="http://schemas.microsoft.com/sharepoint/soap/workflow/" xmlns:dsss="http://schemas.microsoft.com/office/2006/digsig-setup" xmlns:dssi="http://schemas.microsoft.com/office/2006/digsig" xmlns:mdssi="http://schemas.openxmlformats.org/package/2006/digital-signature" xmlns:mver="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns:mrels="http://schemas.openxmlformats.org/package/2006/relationships" xmlns:spwp="http://microsoft.com/sharepoint/webpartpages" xmlns:ex12t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:ex12m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:pptsl="http://schemas.microsoft.com/sharepoint/soap/SlideLibrary/" xmlns:spsl="http://microsoft.com/webservices/SharePointPortalServer/PublishedLinksService" xmlns:Z="urn:schemas-microsoft-com:" xmlns:st="&#1;" 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;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
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";}
span.EmailStyle18
        {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;}
-->
</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 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'>Ramesh,<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'>You&#8217;re right there should be a centralized way to
implement these. Unfortunately, there are just too many ways for Java
applications to write HTML. In .NET it&#8217;s more standard.  The PrintWriter
does not have the appropriate context to encode properly &#8211; for example,
it does not know whether you&#8217;re currently outputting Javascript, CSS,
HTML, HTML attribute, or a URL.<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'>I think the best thing you can do is to use your own tag library
that properly escapes anything that could have been provided from an untrusted
source.  Don&#8217;t use c:out or ${} or #{} because they don&#8217;t properly
escape. Be careful with the existing taglibs as their escaping is a little
scattershot.<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'>You might like my presentation from last year&#8217;s JavaOne &#8211;
&#8220;<a href="http://java.sun.com/javaone/2009/rockstars.jsp">XSS Proofing Your
JavaEE, JSP, and JSF Applications</a>&#8221;<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"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> owasp-esapi-bounces@lists.owasp.org
[mailto:owasp-esapi-bounces@lists.owasp.org] <b>On Behalf Of </b>Kesavanarayanan,
Ramesh<br>
<b>Sent:</b> Saturday, May 08, 2010 9:42 AM<br>
<b>To:</b> Sebastian Kübeck; Jim Manico<br>
<b>Cc:</b> owasp-esapi@lists.owasp.org; esapi-user@lists.owasp.org<br>
<b>Subject:</b> Re: [OWASP-ESAPI] Implementation of Global Output Encoder with
ESAPI<o:p></o:p></span></p>

</div>

</div>

<p class=MsoNormal><o:p>&nbsp;</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: owasp-esapi-bounces@lists.owasp.org on behalf of Sebastian Kübeck<br>
Sent: Sat 5/8/2010 2:57 AM<br>
To: Jim Manico<br>
Cc: owasp-esapi@lists.owasp.org; esapi-user@lists.owasp.org<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_(Cross_Site_Scripting)_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; OWASP-ESAPI@lists.owasp.org<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; OWASP-ESAPI@lists.owasp.org<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; OWASP-ESAPI@lists.owasp.org<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>
OWASP-ESAPI@lists.owasp.org<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>

</div>

</body>

</html>