Aleksander Machniak
2012-08-15 b3206b4b2822b8c9d18c4730aa1afdf72a758f8c
Fix XSS issue with href="javascript:" not being removed (#1488613)
2 files modified
9 ■■■■ changed files
CHANGELOG 1 ●●●● patch | view | raw | blame | history
program/lib/washtml.php 8 ●●●● patch | view | raw | blame | history
CHANGELOG
@@ -1,6 +1,7 @@
CHANGELOG Roundcube Webmail
===========================
- Fix XSS issue with href="javascript:" not being removed (#1488613)
- Fix impossible to create message with empty plain text part (#1488610)
- Fix stripped apostrophes when replying in plain text to HTML message (#1488606)
- Fix inactive Save search option after advanced search (#1488607)
program/lib/washtml.php
@@ -214,8 +214,11 @@
      $key = strtolower($key);
      $value = $node->getAttribute($key);
      if (isset($this->_html_attribs[$key]) ||
         ($key == 'href' && preg_match('!^([a-z][a-z0-9.+-]+:|//|#).+!i', $value)))
         ($key == 'href' && !preg_match('!^javascript!i', $value)
           && preg_match('!^([a-z][a-z0-9.+-]+:|//|#).+!i', $value))
      ) {
        $t .= ' ' . $key . '="' . htmlspecialchars($value, ENT_QUOTES) . '"';
      }
      else if ($key == 'style' && ($style = $this->wash_style($value))) {
        $quot = strpos($style, '"') !== false ? "'" : '"';
        $t .= ' style=' . $quot . $style . $quot;
@@ -237,7 +240,8 @@
        else if (preg_match('/^data:.+/i', $value)) { // RFC2397
          $t .= ' ' . $key . '="' . htmlspecialchars($value, ENT_QUOTES) . '"';
        }
      } else
      }
      else
        $washed .= ($washed?' ':'') . $key;
    }
    return $t . ($washed && $this->config['show_washed']?' x-washed="'.$washed.'"':'');