<html><body bgcolor="#FFFFFF"><div>Well,</div><div><br></div><div>Once you call eval or window.setTimeout with any untrusted data - it's game xss over no matter how you encode. The arguments to those functions are the same as userdata between script tags.<br><br>-Jim Manico<div><a href="http://manico.net">http://manico.net</a></div></div><div><br>On Aug 18, 2010, at 12:57 AM, gaz Heyes &lt;<a href="mailto:gazheyes@gmail.com">gazheyes@gmail.com</a>&gt; wrote:<br><br></div><div></div><blockquote type="cite"><div>What's the output look like? Then you also have to account for entities too (depending on the context):-<br>&lt;a href=# onclick="setTimeout('&amp;#92;141lert(1)')"&gt;test&lt;/a&gt;<br><br><div class="gmail_quote">
On 18 August 2010 07:30, Jim Manico <span dir="ltr">&lt;<a href="mailto:jim.manico@owasp.org"><a href="mailto:jim.manico@owasp.org">jim.manico@owasp.org</a></a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">









<div lang="EN-US" link="blue" vlink="purple">

<div>

<p class="MsoNormal">Hello folks,</p>

<p class="MsoNormal">&nbsp;</p>

<p class="MsoNormal">I’ve been trying to get my head wrapped around DOM based XSS
and JavaScript encoding in a way that is easy to communicate to a mass
audience. Abe Kang has been kind enough to talk me though these issues.</p>

<p class="MsoNormal">&nbsp;</p>

<p class="MsoNormal">In my opinion, our JavaScript encoder <b>ESAPI.encoder().encodeForJavaScript(taint)</b>
needs more explanation/documentation, and the ESAPI for JS project needs to be
integrated in the XSS Cheatsheet more. Abe thinks there are at least 5 new XSS
Cheatsheet rules specific to DOM XSS – and we will be working on it over the
next few weeks. I love this stuff – the rabbit hole never ends. <span style="font-family: Wingdings;">J</span> </p>

<p class="MsoNormal">&nbsp;</p>

<p class="MsoNormal">So for starters, we edited rule #3 of the XSS Cheatsheet to
briefly discuss illegal JavaScript contexts:</p>

<p class="MsoNormal">&nbsp;</p>

<p class="MsoNormal"><a href="http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet#RULE_.233_-_JavaScript_Escape_Before_Inserting_Untrusted_Data_into_HTML_JavaScript_Data_Values" target="_blank"><a href="http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet#RULE_.233_-_JavaScript_Escape_Before_Inserting_Untrusted_Data_into_HTML_JavaScript_Data_Values">http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet#RULE_.233_-_JavaScript_Escape_Before_Inserting_Untrusted_Data_into_HTML_JavaScript_Data_Values</a></a>
</p>

<p class="MsoNormal">&nbsp;</p>

<p class="MsoNormal">The long and short of it is – there are some JavaScript
contexts that can NEVER handle user data – even if JavaScript encoded!</p>

<p class="MsoNormal">&nbsp;</p>

<p class="MsoNormal">Try this little chunk of JSP out… Run this in Chrome, so you
can kill the never ending popup easily…. </p>

<p class="MsoNormal">&nbsp;</p>

<p class="MsoNormal" style=""><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: teal;">&lt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: rgb(63, 127, 127); background: none repeat scroll 0% 0% silver;">script</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: teal;">&gt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;"></span></p>


<p class="MsoNormal" style=""><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">window.setInterval('</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: rgb(191, 95, 63);">&lt;%=</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">
ESAPI.encoder().encodeForJavaScript(</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: rgb(42, 0, 255);">"alert('I XSS you Beef');"</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: black;">) </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: rgb(191, 95, 63);">%&gt;</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: rgb(42, 0, 255);">');</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;"></span></p>


<p class="MsoNormal"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: teal;">&lt;/</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: rgb(63, 127, 127); background: none repeat scroll 0% 0% silver;">script</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: teal;">&gt;</span></p>


<p class="MsoNormal">&nbsp;</p>

<p class="MsoNormal">Are we on the right track? </p>

<p class="MsoNormal">&nbsp;</p>

<p class="MsoNormal">Cheers All,</p>

<p class="MsoNormal">Jim </p>

</div>

</div>


</blockquote></div><br>
</div></blockquote></body></html>