###########################################################################################################################
## MOD Title: IMG bug
## MOD Version: 1.8.1
## MOD Author: Logeen [www.kurshtml.edu.pl]
## MOD Description: Poprawia dziure w phpBB pozwalajaca manipulowac na bazie danych osobom trzecim poprzez wstawienie na forum specjalnego obrazka lub linka.
## Installation Level: easy
## Installation Time: 5-10 Minutes
##
## Files To Edit: 6
##
## includes/bbcode.php
## viewtopic.php
## includes/usercp_viewprofile.php
## admin/admin_users.php
## includes/page_tail.php
## includes/sessions.php
##
###########################################################################################################################
##
## SZCZEGOLOWY OPIS DZIALANIA
##
## Part 1 (zabezpiecza przed dzialaniem zewnetrznych obrazkow):
## Podczas przegladania forum wycinanie z adresow obrazkow wstawionych przy pomocy BBcode wszystkich parametrow.
##
## Part 2 (zabezpiecza przed dzialaniem zdalnych emblematow):
## Podczas przegladania forum wycinanie z adresow zdalnych emblematow wszystkich parametrow.
## Administrator - w panelu administracyjnym zamiana emblematu zdalnego na jego adres.
##
## Part 3 (zabezpiecza przed przekierowaniem z zewnetrznej strony):
## Administrator/Moderator - sprawdzanie adresu HTTP_REFERER spod ktorego nastapilo wejscie na okreslone strony.
## Umozliwienie wejscia do panelu administracyjnego tylko ze strony glownej.
##
## Kazda z czesci dziala niezaleznie, jednak tylko zainstalowanie wszystkich daje pelna ochrone (jesli na swoim forum masz wyloczone zdalne emblematy, nie musisz instalowac drugiej czesci).
##
###########################################################################################################################
##
## PRZYCZYNY WYSWIETLANIA OSTRZEZEN PO ZAINSTALOWANIU TRZECIEJ CZESCI
##
## "SECURITY ALERT: You can refer to administration panel only from site http://domena_forum/sciezka_skryptu/(index.php)"
## W celach bezpieczenstwa do panelu administracyjnego mozna wchodzic tylko ze strony glownej forum, gdzie nie ma zadnych zdalnych obrazkow ani emblematow.
##
## "SECURITY ALERT: You can't view this page because header HTTP_REFERER sent by your browser is empty! You can refer to this page only from domain http://domena_forum/sciezka_skryptu/"
## Prawdopodobnie wpisales adres "niebezpiecznego" pliku forum (np. modcp.php) recznie w przegladarce. Aby to sie nie powtarzalo, nalezy zawsze najpierw wejsc na strone glowna forum, a dopiero z niej przechodzic do innych miejsc na forum, klikajac odpowiednie linki.
##
## "SECURITY ALERT: You can't view this page because header HTTP_REFERER sent by your browser isn't proper: ..."
## Prawdopodobnie Twoj firewall albo przegladarka blokuje wysylanie referow. Musisz odblokowac ta funkcje, bo inaczej nie dostaniesz wstepu do zadnych opcji administracyjnych. Ta sama przyczyna moze wywolywac rowniez pierwszy blad.
##
## "SECURITY ALERT: You can refer to this page only from domain http://domena_forum/sciezka_skryptu/"
## Jesli zobaczysz cos takiego, jest prawdopodobne, ze wlasnie ktos probowal sie wlamac. Oznacza to, ze do jednego z "niebezpiecznych" plikow na forum zostales przekierowany z zewnetrznej strony, co jest wykorzystywane w tej luce bezpieczenstwa.
## Inna przyczyna pojawienia sie tego ostrzezenia to nieprawidlowa konfiguracja danych w panelu administracyjnym - po dodaniu sciezki skryptu do domeny forum powinnismy otrzymac: domena_forum/sciezka_skryptu/ np.: www.forum.domena.pl/ (domena: www.forum.domena.pl, sciezka: /) albo localhost/~test/forum/ (domena: localhost, sciezka: /~test/forum/).
##
## Byc moze ostrzezenia te moga byc nieco irytujace, ale tylko w ten sposob Twoje forum moze byc bezpieczne.
##
###########################################################################################################################
#
#-----[ COMMENT: Part 1 ]--------------------------------
#
#
#-----[ OPEN ]--------------------------------
#
includes/bbcode.php
#
#-----[ FIND (phpBB 2.0.6) ]--------------------------------
#
$text = preg_replace("#\[img\]((ht|f)tp://)([^\r\n\t<\"]*?)\[/img\]#sie", "'[img:$uid]\\1' . str_replace(' ', '%20', '\\3') . '[/img:$uid]'", $text);
#
#-----[ FIND (phpBB 2.0.8) ]--------------------------------
#
$text = preg_replace("#\[img\]((ht|f)tp://)([^ \?&=\"\n\r\t<]*?(\.(jpg|jpeg|gif|png)))\[/img\]#sie", "'[img:$uid]\\1' . str_replace(' ', '%20', '\\3') . '[/img:$uid]'", $text);
#
#-----[ REPLACE WITH ]--------------------------------
#
$text = preg_replace("#\[img\]((ht|f)tp://)([^\r\n\t<\"]*?)\[/img\]#sie", "'[img:$uid]\\1' . eregi_replace('\?.*|&.*', '', str_replace(' ', '%20', '\\3')) . '[/img:$uid]'", $text);
#
#-----[ COMMENT: Part 2 ]--------------------------------
#
#
#-----[ OPEN ]--------------------------------
#
viewtopic.php
#
#-----[ FIND ]--------------------------------
#
case USER_AVATAR_REMOTE:
$poster_avatar = ( $board_config['allow_avatar_remote'] ) ? '' : '';
break;
#
#-----[ REPLACE WITH ]--------------------------------
#
case USER_AVATAR_REMOTE:
$poster_avatar = ( $board_config['allow_avatar_remote'] ) ? '
' : '';
break;
#
#-----[ OPEN ]--------------------------------
#
includes/usercp_viewprofile.php
#
#-----[ FIND ]--------------------------------
#
case USER_AVATAR_REMOTE:
$avatar_img = ( $board_config['allow_avatar_remote'] ) ? '
' : '';
break;
#
#-----[ REPLACE WITH ]--------------------------------
#
case USER_AVATAR_REMOTE:
$avatar_img = ( $board_config['allow_avatar_remote'] ) ? '
' : '';
break;
#
#-----[ OPEN ]--------------------------------
#
admin/admin_users.php
#
#-----[ FIND ]--------------------------------
#
case USER_AVATAR_REMOTE:
$avatar = '
';
break;
#
#-----[ REPLACE WITH ]--------------------------------
#
case USER_AVATAR_REMOTE:
$avatar = $user_avatar;
break;
#
#-----[ COMMENT: Part 3 ]--------------------------------
#
#
#-----[ OPEN ]--------------------------------
#
includes/page_tail.php
#
#-----[ FIND ]--------------------------------
#
$admin_link = ( $userdata['user_level'] == ADMIN ) ? '' . $lang['Admin_panel'] . '
' : '';
#
#-----[ REPLACE, WITH ]--------------------------------
#
$admin_link = ( $userdata['user_level'] == ADMIN && (basename($_SERVER['PHP_SELF']) == "index.$phpEx" || basename($HTTP_SERVER_VARS['PHP_SELF']) == "index.$phpEx") ) ? '' . $lang['Admin_panel'] . '
' : '';
#
#-----[ OPEN ]--------------------------------
#
includes/sessions.php
#
#-----[ FIND ]--------------------------------
#
//
// Checks for a given user session, tidies session table and updates user
// sessions at each page refresh
//
function session_pagestart($user_ip, $thispage_id)
{
#
#-----[ BEFORE, ADD ]--------------------------------
#
function check_referer($user_lang='')
{
// List of files (without extensions) you allow do access with no limits - paths relative to "Script path" (entered in "Administration Panel/Configuration"):
$allow_without_referer = array('panel', 'faq', 'index', 'login', 'memberlist', 'search', 'viewforum', 'viewonline', 'viewtopic');
global $board_config, $phpEx;
$exit_msg = '';
$server_protocol = ($board_config['cookie_secure']) ? 'https://' : 'http://';
$server_name = trim($board_config['server_name']);
$server_port = ($board_config['server_port'] <> 80) ? ':' . trim($board_config['server_port']) : '';
$script_name = trim($board_config['script_path']);
$server_url = $server_protocol . $server_name . $server_port . $script_name;
$self = $_SERVER ? $_SERVER['PHP_SELF'] : $HTTP_SERVER_VARS['PHP_SELF'];
if ($script_name && strstr($self, $script_name) == $self) $self = substr($self, strlen($script_name));
$referer = $_SERVER ? $_SERVER['HTTP_REFERER'] : $HTTP_SERVER_VARS['HTTP_REFERER'];
if (strstr($referer, '?')) $referer = substr($referer, 0, strpos($referer, '?'));
if (strstr($referer, '&')) $referer = substr($referer, 0, strpos($referer, '&'));
if (stristr($self, 'admin/') == $self && $referer != $server_url && $referer != $server_url . "index.$phpEx" && stristr($referer, $server_url.'admin/') != $referer) $exit_msg = StrtoLower($user_lang) == 'polish' ? "ALERT BEZPIECZENSTWA:
Mozesz wchodzic do panelu administracyjnego tylko ze strony " . htmlspecialchars($server_url) . "(index.$phpEx)
Aktualny adres wejscia jest niedozwolony:
" . htmlspecialchars($referer) . "
Należy najpierw wejsc na strone glowna forum, a potem kliknac link do panelu administracyjnego.
Prawdopodobne przyczyny komunikatu: