diff --git a/build/build.xml b/build/build.xml index 69caa897c3..bf77d82f6c 100644 --- a/build/build.xml +++ b/build/build.xml @@ -2,9 +2,9 @@ - - - + + + diff --git a/build/webpi/parameters.xml b/build/webpi/parameters.xml index 994247e48e..be4d374632 100644 --- a/build/webpi/parameters.xml +++ b/build/webpi/parameters.xml @@ -9,7 +9,7 @@ scope="iisapp" match="phpBB3" /> - + + match="phpBB3/cache$" /> + match="phpBB3/files$" /> + match="phpBB3/store$" /> + match="phpBB3/images/avatars/upload$" /> + match="phpBB3/config.php$" /> - + + + + + + + + + name="SQL DatabaseName" description="Database name for your application." defaultValue="phpbb" tags="SQL, dbName"> - + + + + + @@ -113,9 +114,13 @@ scope="install/mssql.sql" match="PlaceHolderForUser" /> - + + + + + @@ -129,10 +134,16 @@ match="PlaceHolderForPassword" /> + + + + + + + + + + + + @@ -171,22 +188,13 @@ scope="install/mysql.sql" match="PlaceHolderForDb" /> - - + + + - - - @@ -196,6 +204,10 @@ scope="install/mysql.sql" match="PlaceHolderForUser" /> + + + + + + + + + + + + + + + sql_query($sql); + while ($row = $db->sql_fetchrow($result)) + { + $uid = $row[$uid_field]; + + // thanks support toolkit + $content = html_entity_decode_utf8($row[$content_field]); + set_var($content, $content, 'string', true); + $content = utf8_normalize_nfc($content); + + $bitfield_data = $row[$bitfield_field]; + + if (!is_valid_flash_bbcode($content, $uid) && has_flash_enabled($bitfield_data)) + { + $ids[] = (int) $row[$id_field]; + } + } + $db->sql_freeresult($result); + + return $ids; +} + +function get_flash_regex($uid) +{ + return "#\[flash=([0-9]+),([0-9]+):$uid\](.*?)\[/flash:$uid\]#"; +} + +// extract all valid flash bbcodes +// check if the bbcode content is a valid URL for each match +function is_valid_flash_bbcode($cleaned_content, $uid) +{ + $regex = get_flash_regex($uid); + + $url_regex = get_preg_expression('url'); + $www_url_regex = get_preg_expression('www_url'); + + if (preg_match_all($regex, $cleaned_content, $matches)) + { + foreach ($matches[3] as $flash_url) + { + if (!preg_match("#^($url_regex|$www_url_regex)$#i", $flash_url)) + { + return false; + } + } + } + + return true; +} + +// check if a bitfield includes flash +// 11 = flash bit +function has_flash_enabled($bitfield_data) +{ + $bitfield = new bitfield($bitfield_data); + return $bitfield->get(11); +} + +// taken from support toolkit +function html_entity_decode_utf8($string) +{ + static $trans_tbl; + + // replace numeric entities + $string = preg_replace('~&#x([0-9a-f]+);~ei', 'code2utf8(hexdec("\\1"))', $string); + $string = preg_replace('~&#([0-9]+);~e', 'code2utf8(\\1)', $string); + + // replace literal entities + if (!isset($trans_tbl)) + { + $trans_tbl = array(); + + foreach (get_html_translation_table(HTML_ENTITIES) as $val=>$key) + $trans_tbl[$key] = utf8_encode($val); + } + return strtr($string, $trans_tbl); +} + +// taken from support toolkit +// Returns the utf string corresponding to the unicode value (from php.net, courtesy - romans@void.lv) +function code2utf8($num) +{ + if ($num < 128) return chr($num); + if ($num < 2048) return chr(($num >> 6) + 192) . chr(($num & 63) + 128); + if ($num < 65536) return chr(($num >> 12) + 224) . chr((($num >> 6) & 63) + 128) . chr(($num & 63) + 128); + if ($num < 2097152) return chr(($num >> 18) + 240) . chr((($num >> 12) & 63) + 128) . chr((($num >> 6) & 63) + 128) . chr(($num & 63) + 128); + return ''; +} diff --git a/phpBB/docs/CHANGELOG.html b/phpBB/docs/CHANGELOG.html index f5d6da94b9..66915b18fa 100644 --- a/phpBB/docs/CHANGELOG.html +++ b/phpBB/docs/CHANGELOG.html @@ -90,6 +90,12 @@

1.i. Changes since 3.0.7-PL1

+

Security +

+
    +
  • [PHPBB3-9903] - Execute javascript in [flash=] BBCode +
  • +

Bug

@@ -404,6 +410,8 @@
  • [PHPBB3-9891] - Updater drops language-selection after database-update
  • +
  • [PHPBB3-9509] - phpBB Coding Guidelines state subversion as the version control system for phpBB +
  • Improvement @@ -467,6 +475,8 @@
  • [PHPBB3-9880] - Rename all mentions of CAPTCHA or visual confirmation to anti-bot
  • +
  • [PHPBB3-9899] - Change the style in the ACP for the recaptcha to match that displayed on prosilver +
  • New Feature @@ -509,6 +519,8 @@
  • [PHPBB3-9868] - Make the test suite run and pass using the mssqlnative driver
  • +
  • [PHPBB3-9904] - Update WebPI Parameters.xml +
  • Sub-task diff --git a/phpBB/includes/constants.php b/phpBB/includes/constants.php index 2b19aa185d..90440f74b8 100644 --- a/phpBB/includes/constants.php +++ b/phpBB/includes/constants.php @@ -275,4 +275,4 @@ define('ZEBRA_TABLE', $table_prefix . 'zebra'); // Additional tables -?> \ No newline at end of file +?> diff --git a/phpBB/includes/message_parser.php b/phpBB/includes/message_parser.php index e0b2bb1496..12d8789b59 100644 --- a/phpBB/includes/message_parser.php +++ b/phpBB/includes/message_parser.php @@ -352,6 +352,15 @@ class bbcode_firstpass extends bbcode return '[flash=' . $width . ',' . $height . ']' . $in . '[/flash]'; } + $in = str_replace(' ', '%20', $in); + + // Make sure $in is a URL. + if (!preg_match('#^' . get_preg_expression('url') . '$#i', $in) && + !preg_match('#^' . get_preg_expression('www_url') . '$#i', $in)) + { + return '[flash=' . $width . ',' . $height . ']' . $in . '[/flash]'; + } + // Apply the same size checks on flash files as on images if ($config['max_' . $this->mode . '_img_height'] || $config['max_' . $this->mode . '_img_width']) { diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index 5fc909c414..bfd7f58abd 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -923,6 +923,8 @@ function database_update_info() '3.0.7' => array(), // No changes from 3.0.7-PL1 to 3.0.8-RC1 '3.0.7-PL1' => array(), + // No changes from 3.0.8-RC1 to 3.0.8 + '3.0.8-RC1' => array(), ); } @@ -1861,6 +1863,10 @@ function change_database_data(&$no_updates, $version) $no_updates = false; break; + + // No changes from 3.0.8-RC1 to 3.0.8 + case '3.0.8-RC1': + break; } }