From: Michael M Slusarz Date: Tue, 4 May 2010 05:04:25 +0000 (-0600) Subject: Bug #8715: Handle multiple data declarations per tag. X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=23c8ed79dd7c65bca75f984646522f01fbec467b;p=horde.git Bug #8715: Handle multiple data declarations per tag. --- diff --git a/framework/Text_Filter/lib/Horde/Text/Filter/Xss.php b/framework/Text_Filter/lib/Horde/Text/Filter/Xss.php index 9242ecfa1..7c71ad1ad 100644 --- a/framework/Text_Filter/lib/Horde/Text/Filter/Xss.php +++ b/framework/Text_Filter/lib/Horde/Text/Filter/Xss.php @@ -214,15 +214,6 @@ class Horde_Text_Filter_Xss extends Horde_Text_Filter_Base $patterns[$pattern] = '<$1' . $this->_params['replace'] . '_tag'; } - /* Strip out data URLs living in an A HREF element (Bug #8715). */ - $malicious = '/<((?:a|�*65;?|�*41;?|�*97;?|�*61;?)\b[^>]+?)' . - '(?:h|�*72;?|�*48;?|�*104;?|�*68;?)\s*' . - '(?:r|�*82;?|�*52;?|�*114;?|�*72;?)\s*' . - '(?:e|�*69;?|�*45;?|�*101;?|�*65;?)\s*' . - '(?:f|�*70;?|�*46;?|�*102;?|�*66;?)\s*=' . - '("|\')?\s*data:(?(2)[^"\')>]*|[^\s)>]*)(?(2)\\2)/is'; - $patterns[$malicious] = '<$1'; - /* Comment out style/link tags. */ if ($this->_params['strip_styles']) { if ($this->_params['strip_style_attributes']) { @@ -290,6 +281,20 @@ class Horde_Text_Filter_Xss extends Horde_Text_Filter_Base */ public function postProcess($text) { + /* Strip out data URLs living in an A HREF element (Bug #8715). + * Done here because we need to match more than 1 possible data + * entry per tag. */ + $data_from = '/<((?:a|�*65;?|�*41;?|�*97;?|�*61;?)\b[^>]+?)' . + '(?:h|�*72;?|�*48;?|�*104;?|�*68;?)\s*' . + '(?:r|�*82;?|�*52;?|�*114;?|�*72;?)\s*' . + '(?:e|�*69;?|�*45;?|�*101;?|�*65;?)\s*' . + '(?:f|�*70;?|�*46;?|�*102;?|�*66;?)\s*=' . + '("|\')?\s*data:(?(2)[^"\')>]*|[^\s)>]*)(?(2)\\2)/is'; + $data_to = '<$1'; + do { + $text = preg_replace($data_from, $data_to, $text, -1, $count); + } while ($count); + ini_restore('pcre.backtrack_limit'); // Restore CDATA data diff --git a/framework/Text_Filter/test/Horde/Text/Filter/fixtures/xss95.html b/framework/Text_Filter/test/Horde/Text/Filter/fixtures/xss95.html new file mode 100644 index 000000000..b7aa7abec --- /dev/null +++ b/framework/Text_Filter/test/Horde/Text/Filter/fixtures/xss95.html @@ -0,0 +1 @@ +Click me diff --git a/framework/Text_Filter/test/Horde/Text/Filter/xss.phpt b/framework/Text_Filter/test/Horde/Text/Filter/xss.phpt index b44afaa7e..c63ec0db8 100644 --- a/framework/Text_Filter/test/Horde/Text/Filter/xss.phpt +++ b/framework/Text_Filter/test/Horde/Text/Filter/xss.phpt @@ -222,6 +222,8 @@ xss84.html xss85.html PT SRC="http://ha.ckers.org/a.js"> +xss95.html +Click me xss96.html Click me xss97.html