Small enhancement to escape:javascript

From: Date: Fri, 26 May 2006 10:03:50 +0000
Subject: Small enhancement to escape:javascript
Groups: php.smarty.dev 
Request: Send a blank email to php-smarty-dev+get-2868@lists.php.net to get a copy of this message
Hi! As said in XHTML 1.0 / HTML Compatibility Guidelines / Embedded Style Sheets and Scripts http://www.w3.org/TR/xhtml1/#C_4 strings < or & or ]]> or -- are not recommended in embedded scripts. '<', '>' and '&' are prohibited if script section is not properly marked as CDATA. At least '<' is not good for old HTML too (basically, in '</script>' string). So, I think it is good to escape '<','>','&','--' properly in javascript-escaped strings Konstantin Pelepelin Proposed patch: ========== begin diff -u -b -r1.23 modifier.escape.php --- modifier.escape.php 23 Nov 2005 20:36:05 -0000 1.23 +++ modifier.escape.php 26 May 2006 09:44:07 -0000 @@ -62,7 +62,8 @@ case 'javascript': // escape quotes and backslashes, newlines, etc. - return strtr($string, array('\\'=>'\\\\',"'"=>"\\'",'"'=>'\\"',"\r"=>'\\r',"\n"=>'\\n','</'=>'<\/')); + return strtr($string, array('\\'=>'\\\\',"'"=>"\\'",'"'=>'\\"',"\r"=>'\\r',"\n"=>'\\n', + '<'=>'\\074','>'=>'\\076','&'=>'\\046','--'=>'\\055\\055')); case 'mail': // safe way to display e-mail address on a web page ========== end Complicated test example: ========== begin {assign var='any_user_data' value='malicious </script><script>window.alert("malicious!")</script>'} {capture assign='onclick'} window.alert('{$any_user_data|escape:'javascript'}');return false; {/capture} {capture assign='html'} <a href="#" onclick="{$onclick|escape}">click!</a> {/capture} <script language="JavaScript" type="text/javascript"> document.write('{$html|escape:'javascript'}'); </script> ========== end

« previous php.smarty.dev (#2868) next »