Include BBcode MOD

Здесь авторы могут постить бета-версии своих модификаций для phpBB 2.0.x. Внимание! Не устанавливайте бета-версии модов на работающие форумы!

Include BBcode MOD

Сообщение avm 26.01.2005 2:08

Этот мод позволяет администраторам форумов вставлять в сообщения внешние файлы и результаты работы внешних скриптов. Синтаксис аналогичен инструкции php include(). За исключением того, что перед добавлением в сообщение, контент парсится на нежелательные вхождения (javascript, заголовки html, и т.д.).
Сделано в основном для применения с модом Glance v.2, для создания user-dependent или просто динамических объявлений.
Делал для себя - может кому-то будет интересно...

P.S. Возможно название не очень удачное - тогда поправьте меня :)
Код: Выделить всё
################################################################
## MOD Title: Include BBcode MOD
## MOD Author: avm < avm@tverskie.net > (Alex V.Musienko) N/A
## MOD Description: Adds [include(remote_filename_or_url)] BBcode tag for evaluating external scripts/files.
## MOD Version: 1.0.1
##
## Installation Level: Easy
## Installation Time: 5 Minutes
## Files To Edit: includes/bbcode.php
## Included Files: N/A
##############################################################
## For Security Purposes, Please Check: http://www.phpbb.com/mods/ for the
## latest version of this MOD. Downloading this MOD from other sites could cause malicious code
## to enter into your phpBB Forum. As such, phpBB will not offer support for MOD's not offered
## in our MOD-Database, located at: http://www.phpbb.com/mods/
##############################################################
## Author Notes:
## Tag behaviour is similar to php include() statement.
## This mod gives an ability for administrator to make dinamic posts.
## Using it with Glance v.2 MOD, administrator can make visitor-dependent annotations.
## Since PHP 4.3.0 it is available to include remote files if allow_url_fopen is true.
##
## IMPORTANT: Use it carefully, because of possible security holes in external scripts/pages.
##
##############################################################
## MOD History:
##
##   2005-02-05 - Version 1.0.1
##      - modified behaviuor, if tag used not by forum administrator
##      - modified order of tag processing (now it goes after [i]...[/i] tags)
##      - added cut of frameset from external file
##
##   2005-01-25 - Version 1.0.0
##      - Initial Release
##
##############################################################
## Before Adding This MOD To Your Forum, You Should Back Up All Files Related To This MOD
##############################################################

#
#-----[ OPEN ]---------------------------------
#
includes/bbcode.php
#
#-----[ FIND ]---------------------------------
#
   $text = str_replace("[/i:$uid]", $bbcode_tpl['i_close'], $text);
#
#-----[ AFTER, ADD ]---------------------------
#
   // [include] for external script use
   $text = preg_replace("#\[include\((.*?)\):$uid\]#sie", "use_include('\\1')", $text);
#
#-----[ FIND ]---------------------------------
#
function bbencode_first_pass($text, $uid)
{
#
#-----[ AFTER, ADD ]---------------------------
#
   global $userdata;
#
#-----[ FIND ]---------------------------------
#
   $text = preg_replace("#\[i\](.*?)\[/i\]#si", "[i:$uid]\\1[/i:$uid]", $text);
#
#-----[ AFTER, ADD ]---------------------------
#
   // [include] for external script use
   $text = preg_replace("#\[include\((.*?)\)\]#si", (($userdata['user_level'] == ADMIN) ? "[include(\\1):$uid]" : "[u:$uid]\\1[/u:$uid]") , $text);
#
#-----[ FIND ]---------------------------------
#
?>
#
#-----[ BEFORE, ADD ]--------------------------
#

function use_include($link) {
    $map = array(
   "'.*?<body[^>]*?>'si",         "",      // replace all before BODY
   "'</body[^>]*?>.*?'si",         "",      // replace all after BODY
   "'.*?<html[^>]*?>'si",         "",      // replace all before HTML
   "'</html[^>]*?>.*?'si",         "",      // replace all after HTML
   "'<head[^>]*?>.*?</head>'si",      "",      // replace all HEADers
   "'<script[^>]*?>.*?</script>'si",   "",      // replace all javaScript
   "'(^|[\r\n])[\s]+'",         "\\1",      // replace all leading spaces
   "'<frameset[^>]*?>.*?</frameset>'si",   "",      // replace all FRAMESETs
    );
/*
   "'<[\/\!]*?[^<>]*?>'si",      "",      // replace html-tags
   "'&(quot|#34);'i",         "\"",
   "'&(amp|#38);'i",         "&",
   "'&(lt|#60);'i",         "<",
   "'&(gt|#62);'i",         ">",
   "'&(nbsp|#160);'i",         " ",
   "'&(iexcl|#161);'i",         chr(161),
   "'&(cent|#162);'i",         chr(162),
   "'&(pound|#163);'i",         chr(163),
   "'&(copy|#169);'i",         chr(169),
   "'&#(\d+);'e",            "chr(\\1)",
*/
    $i=0; while ($i < count($map)) { $srch[]=$map[$i++]; $repl[]=$map[$i++]; }
    ob_start();
    @include($link);
    $result=ob_get_contents();
    ob_end_clean();
    return trim(preg_replace($srch, $repl, $result));
}
#
#-----[ SAVE/CLOSE ALL FILES ]-----------------
#
# EoM
Последний раз редактировалось avm 25.03.2005 14:25, всего редактировалось 2 раз(а).
выделенный сервер по цене обычного хостинга - менее 150 рублей в месяц
Благодарности принимаются в Яндекс.Деньгах на счет 4100143316948
Аватара пользователя
avm
phpBB 2.0.13
 
Сообщения: 636
Зарегистрирован: 16.01.2005 11:40
Откуда: Москва


Сообщение Vladson 01.02.2005 1:28

Я такого мода себе не поставил бы, этот мод из категории повышенной опасности
У меня уже родилась идея как взломать этот мод, и получить админский доступ к форуму где он стоит, но пока я не попробовал это только догадки
Серый цвет светлый (светлее чёрного) и серый цвет тёмный (темнее белого) и серый цвет средний (между чёрным и белым).
Сколько бы мнений ни было все правда, а истины просто нет. Любой кто думает что докопался до истины всего лишь выдумал себе свою правду.
Хотя возможно просто поверил в чужую ложь...
Аватара пользователя
Vladson
phpBB 2.0 RC-1 (pre)
phpBB 2.0 RC-1 (pre)
 
Сообщения: 1037
Зарегистрирован: 27.04.2004 6:07
Откуда: Estonia, Tallinn

Сообщение avm 01.02.2005 7:34

Не так страшен черт... Этот мод не опаснее, чем простой инклуд в любом php скрипте. Если конечно, не попросить админа форума использовать в [include(...)] полный урл своего скрипта :) . Если админ сам себе враг и на это поведется, то для такой мартышки опасно вообще быть админом ;)
Уточню, чтобы не было разнотолков: этот мод добавляет тег только для использования админом!
выделенный сервер по цене обычного хостинга - менее 150 рублей в месяц
Благодарности принимаются в Яндекс.Деньгах на счет 4100143316948
Аватара пользователя
avm
phpBB 2.0.13
 
Сообщения: 636
Зарегистрирован: 16.01.2005 11:40
Откуда: Москва

Сообщение Coagulant 01.02.2005 11:55

// [sub] for subscript text

Такого тега по умолчанию нет в phpbb :)

Да, мод не добавляет безопасности форуму, скорее наоборот. Достаточно получить логин-пароль адмна (модератора) на форум и можно попрощаться с сайтом. Маловероятно, но всё же.
Аватара пользователя
Coagulant
phpBB 2.0.17
 
Сообщения: 1030
Зарегистрирован: 10.01.2005 20:43
Откуда: Москва

Сообщение Vladson 01.02.2005 19:08

Если конечно, не попросить админа форума использовать в [include(...)] полный урл своего скрипта

Достаточно получить логин-пароль адмна

Поверьте мне не обязательно, админ сам поставит хотя и не будет знать даже о том что он на форуме был в этот момент есть такая вещь как XSS и благодаря этому моду её использовать проще простого...
Серый цвет светлый (светлее чёрного) и серый цвет тёмный (темнее белого) и серый цвет средний (между чёрным и белым).
Сколько бы мнений ни было все правда, а истины просто нет. Любой кто думает что докопался до истины всего лишь выдумал себе свою правду.
Хотя возможно просто поверил в чужую ложь...
Аватара пользователя
Vladson
phpBB 2.0 RC-1 (pre)
phpBB 2.0 RC-1 (pre)
 
Сообщения: 1037
Зарегистрирован: 27.04.2004 6:07
Откуда: Estonia, Tallinn

Сообщение avm 05.02.2005 3:53

Внес изменения направленные на улучшение безопасности. Также, спасибо Coagulant, "переставил" обработку тега.

Единственная угроза была в том, что этот тэг в сообщениях от "не администратора" вставлялся как текст, и если администратор ответил бы на такое сообщение, то обработка тега происходила. Таким образом, при условии невнимательности администратора, была реальная угроза подставить свой обработчик с помощью этого тега. В данный момент, если этот тег используется не администратором, то ссылка на внешний скрипт лишь отображается "с подчеркиванием" (сохраняется в БД не как [include(...)], а как текст с подчеркиванием!) и не будет никогда исполняться (инклудится).
выделенный сервер по цене обычного хостинга - менее 150 рублей в месяц
Благодарности принимаются в Яндекс.Деньгах на счет 4100143316948
Аватара пользователя
avm
phpBB 2.0.13
 
Сообщения: 636
Зарегистрирован: 16.01.2005 11:40
Откуда: Москва

Сообщение avm 06.02.2005 17:37

Господа, еще кто-нибудь видит логические/фактические дыры? Хотя б намекните...
выделенный сервер по цене обычного хостинга - менее 150 рублей в месяц
Благодарности принимаются в Яндекс.Деньгах на счет 4100143316948
Аватара пользователя
avm
phpBB 2.0.13
 
Сообщения: 636
Зарегистрирован: 16.01.2005 11:40
Откуда: Москва

Сообщение [test] 07.02.2005 20:24

Если я тыркну цитировать, то я вижу путь к твоему скрипту.
Но это опять таки, больше вопрос глупости админа.
Аватара пользователя
[test]
phpBB 1.2.0
 
Сообщения: 17
Зарегистрирован: 07.02.2005 14:16

Сообщение avm 07.02.2005 22:09

В общем, да, юзер может определить путь инклудуемого скрипта... Максимум что из этой фичи можно извлечь - попробовать запустить его напрямую и пропереться от счастья, если админ положил скрипт в папку в которой не стоит .htaccess "Deny from all". При этом, если скрипт выполнит вредоносное действие, то он уже должен был ето сделать еще раньше (прямо в сообщении :D ) по воле самого админа ;)

Вывод: этот тег неопасен для тех кто понимает, либо требуется описалово с количесвом строк раза в два больше самого мода :D
выделенный сервер по цене обычного хостинга - менее 150 рублей в месяц
Благодарности принимаются в Яндекс.Деньгах на счет 4100143316948
Аватара пользователя
avm
phpBB 2.0.13
 
Сообщения: 636
Зарегистрирован: 16.01.2005 11:40
Откуда: Москва

Сообщение [test] 08.02.2005 0:38

ну скажем знать хотя бы домашнюю директорию пользователя уже полезно :). Особено если хостинг не персональный, как правило можно поиметь доступ файлам других пользователей этогоже сервера.

Но в целом соглашусь, криворукому админу всегда моды мешают.
Аватара пользователя
[test]
phpBB 1.2.0
 
Сообщения: 17
Зарегистрирован: 07.02.2005 14:16

Сообщение avm 08.02.2005 16:36

Хмм. Если б я был хостером, я б всех засовывал в CHROOT !
Хотя я знаю, что на ValueHost'е года 2 назад можно было вообще по всему диску шеллом бродить...
выделенный сервер по цене обычного хостинга - менее 150 рублей в месяц
Благодарности принимаются в Яндекс.Деньгах на счет 4100143316948
Аватара пользователя
avm
phpBB 2.0.13
 
Сообщения: 636
Зарегистрирован: 16.01.2005 11:40
Откуда: Москва

Проблема после установки мода

Сообщение Сергей Секирин 25.03.2005 12:11

avm
Установил на локальной версии Include BBcode MOD http://www.phpbbguru.net/community/topic1478.html

МОД РАБОТАЕТ!!! Выводит содержимое внешних файлов с оформлением (как раз то, что и нужно!!!)

Но после установке МОДА форум не покажешь пользователям:-) Вот, что получилось после установки Мода:


1. Отныне при добавлении любой темы в форум или исправлении (posting.php?mode=editpost...) старой над колонтитулом появляется вот что:

?>
Warning: Cannot modify header information - headers already sent by (output started at c:\www\forum\includes\bbcode.php:853) in c:\www\forum\includes\page_header.php on line 496
Warning: Cannot modify header information - headers already sent by (output started at c:\www\forum\includes\bbcode.php:853) in c:\www\forum\includes\page_header.php on line 498
Warning: Cannot modify header information - headers already sent by (output started at c:\www\forum\includes\bbcode.php:853) in c:\www\forum\includes\page_header.php on line 499

А иногда (особенно после длительного просмотра темы, а затем попытке редактирования) пишет:
?>
Warning: Cannot modify header information - headers already sent by (output started at c:\www\forum\includes\bbcode.php:853) in c:\www\forum\includes\sessions.php on line 305
Warning: Cannot modify header information - headers already sent by (output started at c:\www\forum\includes\bbcode.php:853) in c:\www\forum\includes\sessions.php on line 306
Warning: Cannot modify header information - headers already sent by (output started at c:\www\forum\includes\bbcode.php:853) in c:\www\forum\includes\page_header.php on line 496
Warning: Cannot modify header information - headers already sent by (output started at c:\www\forum\includes\bbcode.php:853) in c:\www\forum\includes\page_header.php on line 498
Warning: Cannot modify header information - headers already sent by (output started at c:\www\forum\includes\bbcode.php:853) in c:\www\forum\includes\page_header.php on line 499

2. сразу по добавлении (при подтверждении, что тема успешно добавлена) пишет:

?>
Warning: Cannot modify header information - headers already sent by (output started at c:\www\forum\includes\bbcode.php:853) in c:\www\forum\posting.php on line 590
Warning: Cannot modify header information - headers already sent by (output started at c:\www\forum\includes\bbcode.php:853) in c:\www\forum\includes\page_header.php on line 496
Warning: Cannot modify header information - headers already sent by (output started at c:\www\forum\includes\bbcode.php:853) in c:\www\forum\includes\page_header.php on line 498
Warning: Cannot modify header information - headers already sent by (output started at c:\www\forum\includes\bbcode.php:853) in c:\www\forum\includes\page_header.php on line 499


2. Просто, при просмотре Админом любого сообщения форума, отныне, пишет:

?>
Warning: Cannot modify header information - headers already sent by (output started at c:\www\forum\includes\bbcode.php:853) in c:\www\forum\viewtopic.php on line 561
Warning: Cannot modify header information - headers already sent by (output started at c:\www\forum\includes\bbcode.php:853) in c:\www\forum\includes\page_header.php on line 496
Warning: Cannot modify header information - headers already sent by (output started at c:\www\forum\includes\bbcode.php:853) in c:\www\forum\includes\page_header.php on line 498
Warning: Cannot modify header information - headers already sent by (output started at c:\www\forum\includes\bbcode.php:853) in c:\www\forum\includes\page_header.php on line 499

Если просматривает не админ, то:
?>
Warning: Cannot modify header information - headers already sent by (output started at c:\www\forum\includes\bbcode.php:853) in c:\www\forum\includes\page_header.php on line 496
Warning: Cannot modify header information - headers already sent by (output started at c:\www\forum\includes\bbcode.php:853) in c:\www\forum\includes\page_header.php on line 498
Warning: Cannot modify header information - headers already sent by (output started at c:\www\forum\includes\bbcode.php:853) in c:\www\forum\includes\page_header.php on line 499

При этом всё работает, всё открывается, просматривается, добавляется и удаляется, никаких помех, кроме этих предупреждений над верхним колонтитулом.

Вот строки вышеуказанных файлов:

page_header.php:
line
Код: Выделить всё
496   header ('Cache-Control: private, pre-check=0, post-check=0, max-age=0');
497     }
498     header ('Expires: 0');
499     header ('Pragma: no-cache');


posting.php:
line
Код: Выделить всё
590            setcookie($board_config['cookie_name'] . '_t', serialize($tracking_topics), 0, $board_config['cookie_path'], $board_config['cookie_domain'], $board_config['cookie_secure']);



viewtopic.php:
line
Код: Выделить всё
561    setcookie($board_config['cookie_name'] . '_t', serialize($tracking_topics), 0, $board_config['cookie_path'], $board_config['cookie_domain'], $board_config['cookie_secure']);



sessions.php:
line
Код: Выделить всё
305   tcookie($cookiename . '_data', serialize($sessiondata), $current_time + 31536000, $cookiepath, $cookiedomain, $cookiesecure);
306   setcookie($cookiename . '_sid', $session_id, 0, $cookiepath, $cookiedomain, $cookiesecure);



В чём может быть проблема? Подскажите!!!

Добавлено спустя 22 минуты 57 секунд:

Может быть там в коде МОДА что-то лишнее? типа

?>
:?
Апология здравомыслия - странное занятие Православия:-)
Аватара пользователя
Сергей Секирин
phpBB 2.0.5
 
Сообщения: 244
Зарегистрирован: 03.02.2005 0:59

Сообщение avm 25.03.2005 14:25

Сергей Секирин

В файле includes/bbcode.php в самом конце сейчас у Вас дважды повторяется последовательность "?>" - уберите одну из них...

P.S. В моде эту досадную опечатку я исправил... благодарю.
выделенный сервер по цене обычного хостинга - менее 150 рублей в месяц
Благодарности принимаются в Яндекс.Деньгах на счет 4100143316948
Аватара пользователя
avm
phpBB 2.0.13
 
Сообщения: 636
Зарегистрирован: 16.01.2005 11:40
Откуда: Москва

Сообщение Сергей Секирин 25.03.2005 15:48

avm

Спасибо за такой прекрасный МОД.
Его обязательно нужно выложить в раздел МОДЫ, а не в форуме, где его не найдёшь (я поиском искал - не нашёл :? ), потому, что он значимо расширяет возможности администратора форума.

И пожалуйста, когда выйдет обновление phpBB (обещают ведь какие-то глобальные изменения, даже слышно, что хотят почти полностью переписать кода форума) - перепишите этот МОД!

Он так гибок и позволяет форматирование HTML инклудируемого полностью сохранить, причём действуют оба форматирования. Я ставил во внешнем файле ссылку с использованием классов subSilver.css типа class="postlink" href="/viewtopic.php?t=87" и это форматирование работает.

Вставка у меня работает и под модератором и даже в сообщениях пользователей, когда этот код инклуда вставляет админ! (например админ может добавить в сообщение 1 или 100 пользователей ма-аленькую строчку инклуда и у всех буде бо-ольшая прибавка к их тексту, к тому-же отформатированная и красивая.

Спасибо!
Апология здравомыслия - странное занятие Православия:-)
Аватара пользователя
Сергей Секирин
phpBB 2.0.5
 
Сообщения: 244
Зарегистрирован: 03.02.2005 0:59

Сообщение Сергей Секирин 26.04.2005 22:46

Не могу понять: у меня на локальной версии инклудируемый файл формата HTML вставляется как надо, т.е. текст идёт непрерывным по всей ширине страницы и т.д. На хост я перенёс скрипты через FTP, так что код идентичный. (МОжет что-то забыл перенести??? Давно было...)

А на хосте строки читаются как в
редакторе HTML - строками!!!, по стольку
символов,
сколько их в строках source кода, т.
е. как здесь написано.

В чём может быть дело - почему конец строк в файле источнике воспринимается как новый абзац, когда там нет никакого тэга и переноса быть не должно в выводе текста?
Помогите, кто разбирается.

Добавлено спустя 18 минут 42 секунды:

В принципе это мелочь, я уже приспособился готовить тексты, делая в редакторе HTML каждый абзац в одной очень длинной строке. Но подготовка текста занимает время и подумалось - может кто-то знает, хотя бы где искать ошибку... :oops:
Апология здравомыслия - странное занятие Православия:-)
Аватара пользователя
Сергей Секирин
phpBB 2.0.5
 
Сообщения: 244
Зарегистрирован: 03.02.2005 0:59


Вернуться в Бета-версии модов для phpBB 2.0.x

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0