<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html; charset=ISO-8859-1"
 http-equiv="Content-Type">
  <title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
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 class="moz-txt-link-freetext" 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>
<pre wrap="">GXP : <a class="moz-txt-link-freetext"
 href="http://code.google.com/p/gxp/">http://code.google.com/p/gxp/</a> .  It's another,
older, Google offering on that front that is much closer structurally
to JSP and so possibly a better option for someone who has a bunch of
broken JSPs and wants to migrate piecemeal to a better system.
If someone wants to work around the auto-escaping they can use
<a class="moz-txt-link-freetext"
 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>
but such exceptions are captured in the java type system which makes
auditing them and focusing logging and assertions around them fairly
easy.
They've done a really bad job documenting and advocating GXP but I've
used it and it is really well thought out, easy to use, and feature
complete.  <a class="moz-txt-link-freetext"
 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>
</pre>
<pre wrap="">
</pre>
<br>
<br>
<br>
<blockquote
 cite="mid:A94809599F3A1E41B0BC7AA9823ED8FE077CA6@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: [OWASP-ESAPI] Implementation of Global Output Encoder with
ESAPI</title>
<!-- Converted from text/plain format -->
  <p><font size="2">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 class="moz-txt-link-abbreviated" href="mailto:owasp-esapi-bounces@lists.owasp.org">owasp-esapi-bounces@lists.owasp.org</a> on behalf of Sebastian K&uuml;beck<br>
Sent: Sat 5/8/2010 2:57 AM<br>
To: Jim Manico<br>
Cc: <a class="moz-txt-link-abbreviated" href="mailto:owasp-esapi@lists.owasp.org">owasp-esapi@lists.owasp.org</a>; <a class="moz-txt-link-abbreviated" 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&uuml;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 moz-do-not-send="true"
 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( "MyWrapper" ).error(<br>
&gt;&gt;&gt;&gt; org.owasp.esapi.Logger.EVENT_FAILURE, "Unable to
encode value", 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("login").value
='&lt;%=<br>
&gt;&gt;&gt;&gt;&gt; (String)request.getAttribute("username")&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("login").value
='&lt;%= cleanXSS(<br>
&gt;&gt;&gt;&gt;&gt; (String)request.getAttribute("username")&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 moz-do-not-send="true"
 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 class="moz-txt-link-abbreviated" href="mailto:OWASP-ESAPI@lists.owasp.org">OWASP-ESAPI@lists.owasp.org</a><br>
&gt;&gt;&gt;&gt;&gt; <a moz-do-not-send="true"
 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 class="moz-txt-link-abbreviated" href="mailto:OWASP-ESAPI@lists.owasp.org">OWASP-ESAPI@lists.owasp.org</a><br>
&gt;&gt;&gt;&gt; <a moz-do-not-send="true"
 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 moz-do-not-send="true" 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 moz-do-not-send="true" 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 class="moz-txt-link-abbreviated" href="mailto:OWASP-ESAPI@lists.owasp.org">OWASP-ESAPI@lists.owasp.org</a><br>
&gt; <a moz-do-not-send="true"
 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 class="moz-txt-link-abbreviated" href="mailto:OWASP-ESAPI@lists.owasp.org">OWASP-ESAPI@lists.owasp.org</a><br>
  <a moz-do-not-send="true"
 href="https://lists.owasp.org/mailman/listinfo/owasp-esapi">https://lists.owasp.org/mailman/listinfo/owasp-esapi</a><br>
  <br>
  </font>
  </p>
</blockquote>
<br>
<br>
<pre class="moz-signature" cols="72">-- 
Jim Manico
OWASP Podcast Host/Producer
OWASP ESAPI Project Manager
<a class="moz-txt-link-freetext" href="http://www.manico.net">http://www.manico.net</a></pre>
</body>
</html>