towa48 Опубликовано 18 Ноября 2006 Жалоба Поделиться Опубликовано 18 Ноября 2006 Вот тут написано, как вручную исправить уязвимостьОбновление безопасности в IPB 2.1.x (17.10.06) Кусок кода из class_bbcode_core.phpelse { # Tricky.. match anything that's not a closing tag, or nothing preg_match_all( "#(\[$preg_tag\])((?!\[/$preg_tag\]).+?)?(\[/$preg_tag\])#si", $t, $match ); for ($i=0; $i < count($match[0]); $i++) { $tmp = $row['bbcode_replace']; $tmp = str_replace( '{content}', $match[2][$i], $tmp ); $t = str_replace( $match[0][$i], $tmp, $t ); } } Написано, что послеpreg_match_all( "#(\[$preg_tag\])((?!\[/$preg_tag\]).+?)?(\[/$preg_tag\])#si", $t, $match ); нужно вставитьif ( $row['bbcode_tag'] == 'snapback' ) { $match[2][$i] = intval( $match[2][$i] ); } Но цикла-то нет! Есть foreach выше по коду, но что-то мне подсказывает, что это не в кассу..Может конечный код должен выглядеть такelse { # Tricky.. match anything that's not a closing tag, or nothing preg_match_all( "#(\[$preg_tag\])((?!\[/$preg_tag\]).+?)?(\[/$preg_tag\])#si", $t, $match ); for ($i=0; $i < count($match[0]); $i++) { # Bug fix! if ( $row['bbcode_tag'] == 'snapback' ) { $match[2][$i] = intval( $match[2][$i] ); } $tmp = $row['bbcode_replace']; $tmp = str_replace( '{content}', $match[2][$i], $tmp ); $t = str_replace( $match[0][$i], $tmp, $t ); } } Ссылка на комментарий Поделиться на других сайтах Прочее
vasyast Опубликовано 18 Ноября 2006 Жалоба Поделиться Опубликовано 18 Ноября 2006 Вы говорите чепуху. Вам следует ещё раз прочитать объявление о патче безопасности форума и выполнить исправление в файле строго соблюдая инструкцию, которая ясно и понятно предлагает алгоритм по устранению уязвимости. Ссылка на комментарий Поделиться на других сайтах Прочее
towa48 Опубликовано 18 Ноября 2006 Автор Жалоба Поделиться Опубликовано 18 Ноября 2006 Ок просто посмотрел кусок кода выше.. if ( $row['bbcode_useoption'] ) { preg_match_all( "#(\[".preg_quote($row['bbcode_tag'], '#' )."=(?:"|&\#39;)?(.+?)(?:"|&\#39;)?\])(.+?)(\[/".preg_quote($row['bbcode_tag'], '#' )."\])#si", $t, $match ); for ($i=0; $i < count($match[0]); $i++) { # XSS Check: Bug ID: 980 if ( $row['bbcode_tag'] == 'post' OR $row['bbcode_tag'] == 'topic' ) { $match[2][$i] = intval( $match[2][$i] ); } $tmp = $row['bbcode_replace']; $tmp = str_replace( '{option}' , $match[2][$i], $tmp ); $tmp = str_replace( '{content}', $match[3][$i], $tmp ); $t = str_replace( $match[0][$i], $tmp, $t ); } } else { # Tricky.. match anything that's not a closing tag, or nothing preg_match_all( "#(\[$preg_tag\])((?!\[/$preg_tag\]).+?)?(\[/$preg_tag\])#si", $t, $match ); for ($i=0; $i < count($match[0]); $i++) { $tmp = $row['bbcode_replace']; $tmp = str_replace( '{content}', $match[2][$i], $tmp ); $t = str_replace( $match[0][$i], $tmp, $t ); } } Ну почему чепуху? Использование $match[2][$i] предполагает наличие цикла, которого нет, если следовать вашему алгоритму.. Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 19 Ноября 2006 Жалоба Поделиться Опубликовано 19 Ноября 2006 Ну почему чепуху? Использование $match[2][$i] предполагает наличие цикла, которого нет, если следовать вашему алгоритму..Это почему ж?$match возврщает preg_match_allа $row берётся из froreach намного выше Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения