########################################################################################################################### ## 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:" : "SECURITY ALERT: You can refer to administration panel only from site " . htmlspecialchars($server_url) . "(index.$phpEx)
Actual referer (" . htmlspecialchars($referer) . ") is not allowed!"; else { for ($i = 0; $i < count($allow_without_referer); $i++) { if ($allow_without_referer[$i].'.'.$phpEx == $self) break; } if ($i == count($allow_without_referer)) { if (!$referer) $exit_msg = StrtoLower($user_lang) == 'polish' ? "ALERT BEZPIECZENSTWA:

Nie mozesz wejsc na te strone, poniewaz nie jest znany adres spod ktorego nastapilo przejscie (HTTP_REFERER)!
Mozesz przechodzic tutaj tylko ze strony " . htmlspecialchars($server_url) . "

Należy najpierw wejsc na strone glowna forum, a potem kliknac odpowiedni link.


Prawdopodobne przyczyny komunikatu:" : "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 " . htmlspecialchars($server_url); else if (stristr($referer, 'http://') != $referer && stristr($referer, 'https://') != $referer) $exit_msg = StrtoLower($user_lang) == 'polish' ? "ALERT BEZPIECZENSTWA:

Nie mozesz wejsc na te strone, poniewaz adres spod ktorego nastapilo przejscie (HTTP_REFERER) jest nieprawidlowy:
" . htmlspecialchars($referer) . "

Należy najpierw wejsc na strone glowna forum, a potem kliknac odpowiedni link.


Prawdopodobne przyczyny komunikatu:" : "SECURITY ALERT: You can't view this page because header HTTP_REFERER sent by your browser isn't proper: " . htmlspecialchars($referer); else if (strstr($referer, $server_url) != $referer) $exit_msg = StrtoLower($user_lang) == 'polish' ? "ALERT BEZPIECZENSTWA:

Mozesz przechodzic tutaj tylko ze strony " . htmlspecialchars($server_url) . "
Aktualny adres przejscia jest niedozwolony:
" . htmlspecialchars($referer) . "

Należy najpierw wejsc na strone glowna forum, a potem kliknac odpowiedni link.


Prawdopodobne przyczyny komunikatu:" : "SECURITY ALERT: You can refer to this page only from domain " . htmlspecialchars($server_url) . "
Actual referer (" . htmlspecialchars($referer) . ") is not allowed!"; } } if ($exit_msg) { @ header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); @ header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); @ header("Cache-Control: no-store, no-cache, must-revalidate"); @ header("Cache-Control: post-check=0, pre-check=0", false); @ header("Pragma: no-cache"); exit('!!!' . $exit_msg . ''); } } # #-----[ FIND ]-------------------------------- # // // Delete expired sessions // $expiry_time = $current_time - $board_config['session_length']; $sql = "DELETE FROM " . SESSIONS_TABLE . " WHERE session_time < $expiry_time AND session_id <> '$session_id'"; if ( !$db->sql_query($sql) ) { message_die(CRITICAL_ERROR, 'Error clearing sessions table', '', __LINE__, __FILE__, $sql); } setcookie($cookiename . '_data', serialize($sessiondata), $current_time + 31536000, $cookiepath, $cookiedomain, $cookiesecure); setcookie($cookiename . '_sid', $session_id, 0, $cookiepath, $cookiedomain, $cookiesecure); } # #-----[ AFTER, ADD ]-------------------------------- # if ($userdata['user_level'] == ADMIN || $userdata['user_level'] == MOD) check_referer($userdata['user_lang']); # #-----[ FIND ]-------------------------------- # // // If we reach here then no (valid) session exists. So we'll create a new one, // using the cookie user_id if available to pull basic user prefs. // $user_id = ( isset($sessiondata['userid']) ) ? intval($sessiondata['userid']) : ANONYMOUS; if ( !($userdata = session_begin($user_id, $user_ip, $thispage_id, TRUE)) ) { message_die(CRITICAL_ERROR, 'Error creating user session', '', __LINE__, __FILE__, $sql); } # #-----[ AFTER, ADD ]-------------------------------- # if ($userdata['user_level'] == ADMIN || $userdata['user_level'] == MOD) check_referer($userdata['user_lang']); # #-----[ SAVE/CLOSE ALL FILES ]------------------------------------------ # # EoM