Forum. MyNuke.ru

Forum. MyNuke.ru (http://forum.mynuke.ru/index.php)
-   Безопасность (http://forum.mynuke.ru/forumdisplay.php?f=13)
-   -   Обновляем форум phpBB 2.0.14 до 2.0.15 (http://forum.mynuke.ru/showthread.php?t=216)

BriaN 09.05.2005 17:51

Обновляем форум phpBB 2.0.14 до 2.0.15
 
Обновляем форум phpBB 2.0.14 до 2.0.15.

Так как соника нету это написать решил я :smile:


Откройте modules/Forums/admin/admin_forums.php

Найдите:

PHP код:
 if( $mode == "addforum" 
   { 
      list(
$cat_id) = each($HTTP_POST_VARS['addforum']); 


После добавьте:

PHP код:
 $cat_id intval($cat_id); 



Откройте modules/Forums/admin/admin_smilies.php

Найдите:

PHP код:
 $smile_code = ( isset($HTTP_POST_VARS['smile_code']) ) ? $HTTP_POST_VARS['smile_code'] : $HTTP_GET_VARS['smile_code']; 
         
$smile_url = ( isset($HTTP_POST_VARS['smile_url']) ) ? $HTTP_POST_VARS['smile_url'] : $HTTP_GET_VARS['smile_url']; 
         
$smile_emotion = ( isset($HTTP_POST_VARS['smile_emotion']) ) ? $HTTP_POST_VARS['smile_emotion'] : $HTTP_GET_VARS['smile_emotion']; 


После добавьте:

PHP код:
 $smile_code trim($smile_code); 
         
$smile_url trim($smile_url); 
         
$smile_emotion trim($smile_emotion); 



Откройте modules/Forums/admin/pagestart.php

Найдите:

PHP код:
 */ 
if ( empty(
$no_page_header) ) 


До этого добавьте:

PHP код:
 if (!$userdata['session_admin']) 

   
$header_location = ( @preg_match('/Microsoft|WebSTAR|Xitami/'$_SERVER['SERVER_SOFTWARE']) ) ? 'Refresh: 0; URL=' 'Location: '
   
header($header_location '../../../' append_sid("login.$phpEx?redirect=admin/&admin=1"true)); 
   exit; 




Откройте db/postgres7.php

Найдите:

PHP код:
 $query preg_replace('#(.*WHERE.*)(username|user_email|ban  _email) = \'(.*)\'#ise'"\"\\1LOWER(\\2) = '\" . strtolower('\\3') . \"'\""$query); 




Замените на:

PHP код:
 //         $query = preg_replace('#(.*WHERE.*)(username|user_email|ban  _email) = \'(.*)\'#ise', "\"\\1LOWER(\\2) = '\" . strtolower('\\3') . \"'\"", $query); 



Откройте modules/Forums/groupcp.php

Найдите (340 строка):

PHP код:
 if ( !($row $db->sql_fetchrow($result)) ) 


Замените на:

PHP код:
 if ( !($row $db->sql_fetchrow($result)) || $row['is_auth_mod'] == 



Откройте includes/bbcode.php

Найдите:

PHP код:
 
   global 
$lang$bbcode_tpl


После добавьте:

PHP код:
 $text preg_replace('#(script|about|applet|activex|chrome  ):#is'"\\1:"$text); 


Найдите:

PHP код:
 // [img]image_url_here[/img] code.. 
   // This one gets first-passed.. 
   
$patterns[] = "#\[img:$uid\](.*?)\[/img:$uid\]#si"


Замените на:

PHP код:
 // [img]image_url_here[/img] code.. 
   // This one gets first-passed.. 
   
$patterns[] = "#\[img:$uid\]([^?].*?)\[/img:$uid\]#i"


Найдите:

PHP код:
 // [url=xxxx://www.phpbb.com]phpBB[/url] code.. 
   
$patterns[] = "#\[url=([\w]+?://[^ \"\n\r\t<]*?)\](.*?)\[/url\]#is"
   
$replacements[] = $bbcode_tpl['url3']; 

   
// [url=www.phpbb.com]phpBB[/url] code.. (no xxxx:// prefix). 
   
$patterns[] = "#\[url=((www|ftp)\.[^ \"\n\r\t<]*?)\](.*?)\[/url\]#is"


Замените на:

PHP код:
 // [url=xxxx://www.phpbb.com]phpBB[/url] code.. 
   
$patterns[] = "#\[url=([\w]+?://[^ \"\n\r\t<]*?)\]([^?].*?)\[/url\]#i"
   
$replacements[] = $bbcode_tpl['url3']; 

   
// [url=www.phpbb.com]phpBB[/url] code.. (no xxxx:// prefix). 
   
$patterns[] = "#\[url=((www|ftp)\.[^ \"\n\r\t<]*?)\]([^?].*?)\[/url\]#i"


Найдите:

PHP код:
 */ 
function 
make_clickable($text



После добавьте:

PHP код:
 $text preg_replace('#(script|about|applet|activex|chrome  ):#is'"\\1:"$text); 



Откройте includes/sessions.php

Найдите:

PHP код:
 function session_begin($user_id$user_ip$page_id$auto_create 0$enable_autologin 0


Замените на:

PHP код:
 function session_begin($user_id$user_ip$page_id$auto_create 0$enable_autologin 0$admin 0


Найдите:

PHP код:
 SET session_user_id $user_idsession_start $current_timesession_time $current_timesession_page $page_idsession_logged_in $login 
      WHERE session_id 
'" . $session_id . "' 
         
AND session_ip '$user_ip'"; 
   if ( !
$db->sql_query($sql) || !$db->sql_affectedrows() ) 
   { 
      
$session_id = md5(uniqid($user_ip)); 

      
$sql = "INSERT INTO " . SESSIONS_TABLE . " 
         
(session_idsession_user_idsession_startsession_timesession_ipsession_pagesession_logged_in
         
VALUES ('$session_id''$user_id''$current_time''$current_time''$user_ip''$page_id''$login')"; 


Замените на:

PHP код:
 SET session_user_id $user_idsession_start $current_timesession_time $current_timesession_page $page_idsession_logged_in $loginsession_admin $admin 
      WHERE session_id 
'" . $session_id . "' 
         
AND session_ip '$user_ip'"; 
   if ( !
$db->sql_query($sql) || !$db->sql_affectedrows() ) 
   { 
      list(
$sec$usec) = explode(' ', microtime()); 
      mt_srand((float) 
$sec + ((float) $usec * 100000)); 
      
$session_id = md5(uniqid(mt_rand(), true)); 

      
$sql = "INSERT INTO " . SESSIONS_TABLE . " 
         
(session_idsession_user_idsession_startsession_timesession_ipsession_pagesession_logged_insession_admin
         
VALUES ('$session_id''$user_id''$current_time''$current_time''$user_ip''$page_id''$login''$admin')"; 


Найдите:

PHP код:
 {// ( $userdata['user_session_time'] > $expiry_time && $auto_create ) ? $userdata['user_lastvisit'] : ( 
      
$last_visit = ( $userdata['user_session_time'] > ) ? $userdata['user_session_time'] : $current_time


После добавьте:

PHP код:
 if (!$admin
      { 


Найдите:

PHP код:
 $userdata['user_lastvisit'] = $last_visit

      
$sessiondata['autologinid'] = ( $enable_autologin && $sessionmethod == SESSION_METHOD_COOKIE ) ? $auto_login_key ''


Замените на:

PHP код:
 

      
$userdata['user_lastvisit'] = $last_visit

      
$sessiondata['autologinid'] = (!$admin) ? (( $enable_autologin && $sessionmethod == SESSION_METHOD_COOKIE ) ? $auto_login_key '') : $sessiondata['autologinid']; 


Найдите:

PHP код:
 $userdata['session_page'] = $page_id
   
$userdata['session_start'] = $current_time
   
$userdata['session_time'] = $current_time


После добавьте:

PHP код:
 $userdata['session_admin'] = $admin


Найдите:

PHP код:
 $sql "UPDATE " SESSIONS_TABLE 
                  SET session_time = '
$current_time', session_page = '$thispage_id


Замените на:

PHP код:
 // A little trick to reset session_admin on session re-usage 
               
$update_admin = (!defined('IN_ADMIN') && $current_time $userdata['session_time'] > ($board_config['session_length']+60)) ? ', session_admin = 0' ''

               
$sql "UPDATE " SESSIONS_TABLE 
                  SET session_time = 
$current_time, session_page = $thispage_id$update_admin 



Откройте includes/smtp.php

Найдите:

PHP код:
 if( !$socket fsockopen($board_config['smtp_host'], 25$errno$errstr20) ) 


Замените на:

PHP код:
 if( !$socket = @fsockopen($board_config['smtp_host'], 25$errno$errstr20) ) 



Откройте includes/usercp_viewprofile.php

Найдите:

PHP код:
 
$profiledata get_userdata($HTTP_GET_VARS[POST_USERS_URL]); 


После добавьте:

PHP код:
 if (!$profiledata

   
message_die(GENERAL_MESSAGE$lang['No_user_id_specified']); 




Откройте modules/Forums/language/lang_english/lang_main.php

Найдите:

PHP код:
 $lang['An_error_occured'] = 'An Error Occurred'
$lang['A_critical_error'] = 'A Critical Error Occurred'


После добавьте:

PHP код:
 $lang['Admin_reauthenticate'] = 'To administer the board you must re-authenticate yourself.'



Откройте modules/Forums/language/lang_russian/lang_main.php

Найдите:

PHP код:
 $lang['An_error_occured'] = 'Произошла ошибка';
$lang['A_critical_error'] = 'Произошла критическая ошибка'


После добавьте:

PHP код:
 $lang['Admin_reauthenticate'] = 'Для того, что бы зайти в панель администратора вы должны перезалогинится.'



Откройте modules/Forums/login.php

Найдите:

PHP код:
 if( ( isset($HTTP_POST_VARS['login']) || isset($HTTP_GET_VARS['login']) ) && !$userdata['session_logged_in'] ) 


Замените на:

PHP код:
 if( ( isset($HTTP_POST_VARS['login']) || isset($HTTP_GET_VARS['login']) ) && (!$userdata['session_logged_in'] || isset($HTTP_POST_VARS['admin'])) ) 


Найдите:

PHP код:
 $session_id session_begin($row['user_id'], $user_ipPAGE_INDEXFALSE$autologin); 


Замените на:

PHP код:
 $admin = (isset($HTTP_POST_VARS['admin'])) ? 0
               
$session_id session_begin($row['user_id'], $user_ipPAGE_INDEXFALSE$autologin$admin); 


Найдите:

PHP код:
 if( !$userdata['session_logged_in'] ) 


Замените на:

PHP код:
 if( !$userdata['session_logged_in'] || (isset($HTTP_GET_VARS['admin']) && $userdata['session_logged_in'] && $userdata['user_level'] == ADMIN)) 


Найдите:

PHP код:
 make_jumpbox('viewforum.'.$phpEx$forum_id); 
      
$template->assign_vars(array( 
         
'USERNAME' => $username

         
'L_ENTER_PASSWORD' => $lang['Enter_password'], 


Замените на:

PHP код:
 $s_hidden_fields .= (isset($HTTP_GET_VARS['admin'])) ? '<input type="hidden" name="admin" value="1" />' ''

      
make_jumpbox('viewforum.'.$phpEx$forum_id); 
      
$template->assign_vars(array( 
         
'USERNAME' => $username

         
'L_ENTER_PASSWORD' => (isset($HTTP_GET_VARS['admin'])) ? $lang['Admin_reauthenticate'] : $lang['Enter_password'], 


Откройте modules/Forums/viewtopic.php

Найдите:

PHP код:
 $message str_replace('\"''"'substr(@preg_replace('#(\>(((?>([^><]+|(?R)))*)\<))#se'"@preg_replace('#\b(" $highlight_match ")\b#i', '<span style=\"color:#" $theme['fontcolor3'] . "\"><b>\\\\1</b></span>', '\\0')"'>' $message '<'), 1, -1)); 


Замените на:

PHP код:
 $message str_replace('\"''"'substr(@preg_replace('#(\>(((?>([^><]+|(?R)))*)\<))#se'"@preg_replace('#\b(" str_replace('\\''\\\\'$highlight_match) . ")\b#i', '<span style=\"color:#" $theme['fontcolor3'] . "\"><b>\\\\1</b></span>', '\\0')"'>' $message '<'), 1, -1)); 



Откройте modules/Forums/admin/admin_ug_auth.php

Найдите:

PHP код:
 message_die(GENERAL_MESSAGE$message); 
   }
}
else if ( ( 
$mode == 'user' && ( isset($HTTP_POST_VARS['username']) || $user_id ) ) || ( $mode == 'group' && $group_id ) ) 


До этого добавьте:

PHP код:
 $sql 'SELECT user_id FROM ' USER_GROUP_TABLE 
         WHERE group_id = 
$group_id"
      
$result $db->sql_query($sql); 

      
$group_user = array(); 
      while (
$row $db->sql_fetchrow($result)) 
      { 
         
$group_user[$row['user_id']] = $row['user_id']; 
      } 
      
$db->sql_freeresult($result); 

      
$sql "SELECT ug.user_id, COUNT(auth_mod) AS is_auth_mod 
         FROM " 
AUTH_ACCESS_TABLE " aa, " USER_GROUP_TABLE " ug 
         WHERE ug.user_id IN (" 
implode(', '$group_user) . ") 
            AND aa.group_id = ug.group_id 
            AND aa.auth_mod = 1 
         GROUP BY ug.user_id"

      if ( !(
$result $db->sql_query($sql)) ) 
      { 
         
message_die(GENERAL_ERROR'Could not obtain moderator status'''__LINE____FILE__$sql); 
      } 

      while (
$row $db->sql_fetchrow($result)) 
      { 
         if (
$row['is_auth_mod']) 
         { 
            unset(
$group_user[$row['user_id']]); 
         } 
      } 
      
$db->sql_freeresult($result); 

      if (
sizeof($group_user)) 
      { 
         
$sql "UPDATE " USERS_TABLE 
            SET user_level = " 
USER 
            WHERE user_id IN (" 
implode(', '$group_user) . ")"
         if ( !(
$result $db->sql_query($sql)) ) 
         { 
            
message_die(GENERAL_ERROR'Could not update user level'''__LINE____FILE__$sql); 
         } 
      } 



Откройте includes/usercp_register.php

Найдите:

PHP код:
 if (strtolower($username) != strtolower($userdata['username'])) 


Замените на:

PHP код:
 if (strtolower($username) != strtolower($userdata['username']) || $mode == 'register'



Выполните SQL запрос:

PHP код:
 UPDATE nuke_bbconfig SET config_value='.0.15' where config_name='version'
ALTER TABLE nuke_bbsessions ADD COLUMN session_admin tinyint(2) DEFAULT '0' NOT NULL


заменив nuke_ на свой префикс!

Ну вот и закончено обновление форума. :cool:

Soniks 09.05.2005 18:42

респект :wink:

Soniks 22.05.2005 23:17

Появился небольшой баг в версии 2.0.15. Он связан с правами администратора, для устранения его в файле modules/Forums/admin/admin_ug_auth.php
найдите:
PHP код:
 WHERE user_id IN (" . implode(', ', $group_user) . ")"; 

и замените на:
PHP код:
 WHERE user_id IN (" . implode(', ', $group_user) . ") AND user_level " . MOD; 


Часовой пояс GMT +4, время: 16:42.

Copyright © 2005 by Soniks