Сейчас доточил код, возможность XSS тоже учел.
Если ссылка идет на этот-же домен (с которого постят), то делает ее относительной. Также понимает, собственно, относительные ссылки вида ./folder/mylink.php
Создатели phpbb было учли относительные ссылки (на что указывает get_preg_expression('relative_url'), но сам код неверен), но они не работали
Для того, чтобы тег [url] понимал относительные ссылки нужно:
ОТКРЫВАЕМ ФАЙЛ
includes/message_parser.phpНАХОДИМ
- Код: Выделить всё
preg_match('#^' . preg_quote(generate_board_url(), '#') . get_preg_expression('relative_url') . '$#i', $url))
ЗАМЕНЯЕМ НА
- Код: Выделить всё
preg_match('#^' . get_preg_expression('relative_url') . '$#i', $url)) //BoBr: changed (why they was used generate_board_url() here ?)
НАХОДИМ
- Код: Выделить всё
if (!preg_match('#^[a-z][a-z\d+\-.]*:/{2}#i', $url))
ЗАМЕНЯЕМ НА
- Код: Выделить всё
if (!preg_match('#^[a-z][a-z\d+\-.]*:/{2}|^\./#i', $url)) //BoBr: changed, +prevent XSS attack
НАХОДИМ
- Код: Выделить всё
// Is this a link to somewhere inside this board? If so then remove the session id from the url
if (strpos($url, generate_board_url()) !== false && strpos($url, 'sid=') !== false)
{
$url = preg_replace('/(&|\?)sid=[0-9a-f]{32}&/', '\1', $url);
$url = preg_replace('/(&|\?)sid=[0-9a-f]{32}$/', '', $url);
$url = append_sid($url);
}
ВСТАВЛЯЕМ ПОСЛЕ
- Код: Выделить всё
// BoBr: make relative urls from absolute
$url = preg_replace('|^' . str_replace('.', '\.', generate_board_url()) . '|iU', '.', $url);
// BoBr: end;
ВСЁ
ща надо для картинок еще сделать ...