Forum. MyNuke.ru

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

BriaN 30.12.2005 21:17

Обновляем форум phpBB 2.0.18 до 2.0.19
 
Открываем modules/Forums/admin/admin_board.php
Находим (19):
PHP код:
 $module['General']['Configuration'] = "$file"

Заменяем на:
PHP код:
 $module['General']['Configuration'] = $file

Находим (194):
PHP код:
 "L_MAX_POLL_OPTIONS" => $lang['Max_poll_options'], 
   
"L_FLOOD_INTERVAL" => $lang['Flood_Interval'], 
   
"L_FLOOD_INTERVAL_EXPLAIN" => $lang['Flood_Interval_explain'], 

Ниже добавляем:
PHP код:
 'L_MAX_LOGIN_ATTEMPTS'         => $lang['Max_login_attempts'], 
   
'L_MAX_LOGIN_ATTEMPTS_EXPLAIN'   => $lang['Max_login_attempts_explain'], 
   
'L_LOGIN_RESET_TIME'         => $lang['Login_reset_time'], 
   
'L_LOGIN_RESET_TIME_EXPLAIN'   => $lang['Login_reset_time_explain'], 
   
'MAX_LOGIN_ATTEMPTS'         => $new['max_login_attempts'], 
   
'LOGIN_RESET_TIME'            => $new['login_reset_time'], 

Открываем modules/Forums/admin/admin_db_utilities.php
Находим (696):
PHP код:
 $tables = array('auth_access''banlist''categories''config''disallow''forums''forum_prune''groups''posts''posts_text''privmsgs''privmsgs_text''ranks''search_results''search_wordlist''search_wordmatch''sessions''smilies''themes''themes_name''topics''topics_watch''user_group''users''vote_desc''vote_results''vote_voters''words''confirm'); 

Заменяем на:
PHP код:
 $tables = array('auth_access''banlist''categories''config''disallow''forums''forum_prune''groups''posts''posts_text''privmsgs''privmsgs_text''ranks''search_results''search_wordlist''search_wordmatch''sessions''smilies''themes''themes_name''topics''topics_watch''user_group''users''vote_desc''vote_results''vote_voters''words''confirm''sessions_keys'); 

Открываем modules/Forums/admin/admin_disallow.php
Находим (28):
PHP код:
 $module['Users']['Disallow'] = append_sid($filename); 

Заменяем на:
PHP код:
 $module['Users']['Disallow'] = $filename

Открываем modules/Forums/admin/admin_ranks.php
Находим (27):
PHP код:
 $module['Users']['Ranks'] = "$file"

Заменяем на:
PHP код:
 $module['Users']['Ranks'] = $file

Открываем modules/Forums/admin/admin_styles.php
Находим (30):
PHP код:
 $module['Styles']['Manage'] = "$file"

Заменяем на:
PHP код:
 $module['Styles']['Manage'] = $file

Открываем modules/Forums/admin/admin_users.php
Находим (180):
PHP код:
 message_die(GENERAL_ERROR'Could not delete user from banlist table'''__LINE____FILE__$sql); 
         } 

Ниже добавляем:
PHP код:
 $sql "DELETE FROM " SESSIONS_TABLE 
            WHERE session_user_id = 
$user_id"
         if ( !
$db->sql_query($sql) ) 
         { 
            
message_die(GENERAL_ERROR'Could not delete sessions for this user'''__LINE____FILE__$sql); 
         } 
          
         
$sql "DELETE FROM " SESSIONS_KEYS_TABLE 
            WHERE user_id = 
$user_id"
         if ( !
$db->sql_query($sql) ) 
         { 
            
message_die(GENERAL_ERROR'Could not delete auto-login keys for this user'''__LINE____FILE__$sql); 
         } 

Находим (234):
PHP код:
 $username = ( !empty($HTTP_POST_VARS['username']) ) ? trim(strip_tags(htmlspecialchars($HTTP_POST_VARS['username']))) : ''

Заменяем на:
PHP код:
 $username = ( !empty($HTTP_POST_VARS['username']) ) ? phpbb_clean_username($HTTP_POST_VARS['username']) : ''

Находим (407):
PHP код:
 if( @file_exists(@phpbb_realpath("./" $board_config['avatar_path'] . "/" $this_userdata['user_avatar'])) ) 
            { 
               @
unlink("./" $board_config['avatar_path'] . "/" $this_userdata['user_avatar']); 

Заменяем на:
PHP код:
 if( @file_exists(@phpbb_realpath('./../' $board_config['avatar_path'] . "/" $this_userdata['user_avatar'])) ) 
            { 
               @
unlink('./../' $board_config['avatar_path'] . "/" $this_userdata['user_avatar']); 

Открываем modules/Forums/admin/admin_words.php
Находим (28):
PHP код:
 $module['General']['Word_Censor'] = "$file"

Заменяем на:
PHP код:
 $module['General']['Word_Censor'] = $file

Открываем modules/Forums/admin/index.php
Находим (63):
PHP код:
 include($file); 

Заменяем на:
PHP код:
 include('./' $file); 

Находим (237):
PHP код:
 if( preg_match("/^(3\.23|4\.)/"$version) ) 
         { 
            
$db_name = ( preg_match("/^(3\.23\.[6-9])|(3\.23\.[1-9][1-9])|(4\.)/"$version) ) ? "`$dbname`" $dbname

Заменяем на:
PHP код:
 if( preg_match("/^(3\.23|4\.|5\.)/"$version) ) 
         { 
            
$db_name = ( preg_match("/^(3\.23\.[6-9])|(3\.23\.[1-9][1-9])|(4\.)|(5\.)/"$version) ) ? "`$dbname`" $dbname

Открываем includes/bbcode.php
Находим (203):
PHP код:
 $patterns[] = "#\[url\]([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*?)\[/url\]#is"
   
$replacements[] = $bbcode_tpl['url1']; 

   
// [url]www.phpbb.com[/url] code.. (no xxxx:// prefix). 
   
$patterns[] = "#\[url\]((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*?)\[/url\]#is"

Заменяем на:
PHP код:
 $patterns[] = "#\[url\]([\w]+?://([\w\#$%&~/.\-;:=,?@\]+]|\[(?!url=))*?)\[/url\]#is"
   
$replacements[] = $bbcode_tpl['url1']; 

   
// [url]www.phpbb.com[/url] code.. (no xxxx:// prefix). 
   
$patterns[] = "#\[url\]((www|ftp)\.([\w\#$%&~/.\-;:=,?@\]+]|\[(?!url=))*?)\[/url\]#is"

Находим (255):
PHP код:
 $text bbencode_first_pass_pda($text$uid'/\[quote=(\\\".*?\\\")\]/is''[/quote]'''false''"[quote:$uid=\\1]"); 

Заменяем на:
PHP код:
 $text bbencode_first_pass_pda($text$uid'/\[quote=\\\\"(.*?)\\\\"\]/is''[/quote]'''false''"[quote:$uid=\\\"\\1\\\"]"); 

Находим (392):
PHP код:
 if( preg_match('#\[quote=\\\"#si'$possible_start$match) && !preg_match('#\[quote=\\\"(.*?)\\\"\]#si'$possible_start) ) 
            { 
               
// OK we are in a quote tag that probably contains a ] bracket. 
               // Grab a bit more of the string to hopefully get all of it.. 
               
if ($close_pos strpos($text'"]'$curr_pos 9)) 
               { 
                  if (
strpos(substr($text$curr_pos 9$close_pos - ($curr_pos 9)), '[quote') === false
                  { 
                     
$possible_start substr($text$curr_pos$close_pos $curr_pos 2); 

Заменяем на:
PHP код:
 if( preg_match('#\[quote=\\\"#si'$possible_start$match) && !preg_match('#\[quote=\\\"(.*?)\\\"\]#si'$possible_start) ) 
            { 
               
// OK we are in a quote tag that probably contains a ] bracket. 
               // Grab a bit more of the string to hopefully get all of it.. 
               
if ($close_pos strpos($text'"]'$curr_pos 14)) 
               { 
                  if (
strpos(substr($text$curr_pos 14$close_pos - ($curr_pos 14)), '[quote') === false
                  { 
                     
$possible_start substr($text$curr_pos$close_pos $curr_pos 7); 

Открываем modules/Forums/common.php
Находим (223):
PHP код:
 message_die(GENERAL_MESSAGE'Please ensure both the install/ and contrib/ directories are deleted'); 

Заменяем на:
PHP код:
 message_die(GENERAL_MESSAGE'Please_remove_install_contrib'); 

Открываем includes/functions.php
Находим (161):
PHP код:
 $sql .= ( ( is_integer($user) ) ? "user_id = $user"username = '" .  $user "'" ) . " AND user_id <> " ANONYMOUS

Заменяем на:
PHP код:
 $sql .= ( ( is_integer($user) ) ? "user_id = $user"username = '" .  str_replace("\'""''"$user) . "'" ) . " AND user_id <> " ANONYMOUS

Открываем includes/functions_post.php
Находим (28):
PHP код:
 $html_entities_match = array('#&(?!(\#[0-9]+;))#''#<#''#>#'); 
$html_entities_replace = array('&amp;''&lt;''&gt;'); 

Заменяем на:
PHP код:
 $html_entities_match = array('#&(?!(\#[0-9]+;))#''#<#''#>#''#"#'); 
$html_entities_replace = array('&amp;''&lt;''&gt;''&quot;'); 

Открываем modules/Forums/usercp_confirm.php
Находим (156):
PHP код:
 if (!empty($HTTP_GET_VARS['c'])) 
   { 
      
$_png define_raw_pngs(); 

      
$char substr($codeintval($HTTP_GET_VARS['c']) - 11); 
      
header('Content-Type: image/png'); 
      
header('Cache-control: no-cache, no-store'); 
      echo 
base64_decode($_png[$char]); 

      unset(
$_png); 
      exit; 
   } 

Заменяем на:
PHP код:
 $_png define_raw_pngs(); 

   
$char substr($code, -1); 
   
header('Content-Type: image/png'); 
   
header('Cache-control: no-cache, no-store'); 
   echo 
base64_decode($_png[$char]); 

   unset(
$_png); 
   exit; 


Открываем includes/usercp_register.php
Находим (110):
PHP код:
 $strip_var_list = array('username' => 'username''email' => 'email''icq' => 'icq''aim' => 'aim''msn' => 'msn''yim' => 'yim''website' => 'website''location' => 'location''occupation' => 'occupation''interests' => 'interests'); 
   
$strip_var_list['confirm_code'] = 'confirm_code'

Заменяем на:
PHP код:
 $strip_var_list = array('email' => 'email''icq' => 'icq''aim' => 'aim''msn' => 'msn''yim' => 'yim''website' => 'website''location' => 'location''occupation' => 'occupation''interests' => 'interests''confirm_code' => 'confirm_code'); 

Находим (126):
PHP код:
 $trim_var_list = array('cur_password' => 'cur_password''new_password' => 'new_password''password_confirm' => 'password_confirm''signature' => 'signature'); 

Выше добавляем:
PHP код:
 $username = ( !empty($HTTP_POST_VARS['username']) ) ? phpbb_clean_username($HTTP_POST_VARS['username']) : ''

Находим (301):
PHP код:
 if ($row['code'] != $confirm_code

Выше добавляем:
PHP код:
 // Only compare one char if the zlib-extension is not loaded 
            
if (!@extension_loaded('zlib')) 
            { 
               
$row['code'] = substr($row['code'], -1); 
            } 

Открываем modules/Forums/language/lang_english/lang_admin.php
Находим (749):
PHP код:
 // 
// That's all Folks! 

Выше добавляем:
PHP код:
 // 
// Login attempts configuration 
// 
$lang['Max_login_attempts'] = 'Allowed login attempts'
$lang['Max_login_attempts_explain'] = 'The number of allowed board login attempts.'
$lang['Login_reset_time'] = 'Login lock time'
$lang['Login_reset_time_explain'] = 'Time in minutes the user have to wait until he is allowed to login again after exceeding the number of allowed login attempts.'

Открываем modules/Forums/language/lang_english/lang_main.php
Находим (1021):
PHP код:
 // 
// That's all, Folks! 

Выше добавляем:
PHP код:
 $lang['Login_attempts_exceeded'] = 'The maximum number of %s login attempts has been exceeded. You are not allowed to login for the next %s minutes.'
$lang['Please_remove_install_contrib'] = 'Please ensure both the install/ and contrib/ directories are deleted'

Открываем modules/Forums/language/lang_russian/lang_admin.php
Находим (749):
PHP код:
 // 
// That's all Folks! 

Выше добавляем:
PHP код:
 // 
// Login attempts configuration 
// 
$lang['Max_login_attempts'] = 'Позволить попытки логина'
$lang['Max_login_attempts_explain'] = 'Число позволенных попыток логина на форуме.'
$lang['Login_reset_time'] = 'Время блокировки логина'
$lang['Login_reset_time_explain'] = 'Время в минутах, которое пользователь будет выжидать, пока ему не позволят залогинится снова, после превышения числа позволенных попыток логина.'

Открываем modules/Forums/language/lang_english/lang_main.php
Находим (1021):
PHP код:
 // 
// That's all, Folks! 

Выше добавляем:
PHP код:
 $lang['Login_attempts_exceeded'] = 'Максимальный число %s попыток логина было превышен. Вы не сможете залогинится в течение следующих %s минут.'
$lang['Please_remove_install_contrib'] = 'Пожалуйста убедитесь в том что директории install/ и contrib/ удалены'

Открываем modules/Forums/login.php
Находим (60):
PHP код:
 $sql "SELECT user_id, username, user_password, user_active, user_level 

Заменяем на:
PHP код:
 $sql "SELECT user_id, username, user_password, user_active, user_level, user_login_tries, user_last_login_try 

Находим (79):
PHP код:
 if( md5($password) == $row['user_password'] && $row['user_active'] ) 

Выше добавляем:
PHP код:
 // If the last login is more than x minutes ago, then reset the login tries/time 
            
if ($row['user_last_login_try'] && $board_config['login_reset_time'] && $row['user_last_login_try'] < (time() - ($board_config['login_reset_time'] * 60))) 
            { 
               
$db->sql_query('UPDATE ' USERS_TABLE ' SET user_login_tries = 0, 

user_last_login_try = 0 WHERE user_id = ' 
$row['user_id']); 
               
$row['user_last_login_try'] = $row['user_login_tries'] = 0
            } 
             
            
// Check to see if user is allowed to login again... if his tries are exceeded 
            
if ($row['user_last_login_try'] && $board_config['login_reset_time'] && 

$board_config['max_login_attempts'] && $row['user_last_login_try'] >= (time() - ($board_config['login_reset_time'] * 60)) && $row['user_login_tries'] >= $board_config['max_login_attempts']) 
            { 
               
message_die(GENERAL_MESSAGEsprintf($lang['Login_attempts_exceeded'], $board_config['max_login_attempts'], $board_config['login_reset_time'])); 
            } 

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

Ниже добавляем:
PHP код:
 // Reset login tries 
               
$db->sql_query('UPDATE ' USERS_TABLE ' SET user_login_tries = 0, user_last_login_try = 0 WHERE user_id = ' $row['user_id']); 

Находим (115):
PHP код:
 $redirect = ( !empty($HTTP_POST_VARS['redirect']) ) ? str_replace('&amp;''&'htmlspecialchars($HTTP_POST_VARS['redirect'])) : ''
               
$redirect str_replace('?''&'$redirect); 

Выше добавляем:
PHP код:
 // Save login tries and last login 
               
if ($row['user_id'] != ANONYMOUS
               { 
                  
$sql 'UPDATE ' USERS_TABLE 
                     SET user_login_tries = user_login_tries + 1, user_last_login_try = ' 
time() . 
                     WHERE user_id = ' 
$row['user_id']; 
                  
$db->sql_query($sql); 
               } 

Открываем modules/Private_Messages/index.php
Находим (38):
PHP код:
 $html_entities_match = array('#&(?!(\#[0-9]+;))#''#<#''#>#'); 
$html_entities_replace = array('&amp;''&lt;''&gt;'); 

Заменяем на:
PHP код:
 $html_entities_match = array('#&(?!(\#[0-9]+;))#''#<#''#>#''#"#'); 
$html_entities_replace = array('&amp;''&lt;''&gt;''&quot;'); 

Открываем modules/Forums/templates/subSilver/admin/board_config_body.tpl
Находим (59):
Код HTML:
<td class="row2"><input class="post" type="text" size="3" maxlength="4" name="flood_interval" value="{FLOOD_INTERVAL}" /></td> </tr>

Ниже добавляем:
Код HTML:
<tr> <td class="row1">{L_MAX_LOGIN_ATTEMPTS}<br /><span class="gensmall">{L_MAX_LOGIN_ATTEMPTS_EXPLAIN}</span></td> <td class="row2"><input class="post" type="text" size="3" maxlength="4" name="max_login_attempts" value="{MAX_LOGIN_ATTEMPTS}" /></td> </tr> <tr> <td class="row1">{L_LOGIN_RESET_TIME}<br /><span class="gensmall">{L_LOGIN_RESET_TIME_EXPLAIN}</span></td> <td class="row2"><input class="post" type="text" size="3" maxlength="4" name="login_reset_time" value="{LOGIN_RESET_TIME}" /></td> </tr>

Открываем modules/Forums/templates/subSilver/admin/index_body.tpl
Находим (46):
Код HTML:
<td class="row2"><b>{GZIP_COMPRESSION}</b></td> </tr> </table>

Ниже добавляем:
Код HTML:
<h1>{L_VERSION_INFORMATION}</h1> {VERSION_INFO} <br />

Находим и удаляем (87):
Код HTML:
<h1>{L_VERSION_INFORMATION}</h1> {VERSION_INFO} <br />


Выполняем SQL-запрос (замените префикс nuke_ на свой):
Код:
INSERT INTO nuke_bbconfig (config_name, config_value) VALUES ('max_login_attempts', '5'); INSERT INTO nuke_bbconfig (config_name, config_value) VALUES ('login_reset_time', '30'); UPDATE nuke_bbconfig SET config_value='.0.19' where config_name='version';



Вот и всё, апгрейт форума до версии 2.0.19 успешно завершен :jumplol:

ssmol 31.12.2005 12:38

имхо абсолютно бессмысленное обновление.
ибо у все нормальных людей уже давно стоят аналогичные моды

Soniks 31.12.2005 13:02

Цитата ибо у все нормальных людей уже давно стоят аналогичные моды

а при чем здесь моды??

BriaN 31.12.2005 13:13

Ну это обновление добавляет функцию запрета максимального количества попыток захода в аккаунт на форуме, хотя для bbtonuke это нафиг не надо, в общем короче просто надо ставить что бы обновить версию, темболее 2.0.20 должна точно из себя что то представлять.

ssmol 31.12.2005 18:13

Цитата: Сообщение от Soniks
а при чем здесь моды??


а при том что с 2 модами выполняющими туже функцию что и это обновление оно конфликтует.

тем более сам принцип блокирования атакующего реализован тупо по первобытному. т.е. блокируется не ип атакующего а тот ник к которому подбирают пароль

мой выбор из щиты такого рода Protect user account блокировка атакующего идет по ип (с обновлением до 2.1.19 неконфликтует)

Soniks 31.12.2005 19:39

ssmol обновление предоставлено не только вам, а всем пользователям, и у большинства не стоят ни какие моды
разумнее "банить" по логину, а не по паролю, т.к. спуфиры спокойно меняют проксю в таком случаи и продолжают перебор к уязвимому акаунту.

ssmol 31.12.2005 19:52

Soniks да я и неговорю что оно ненадо (обновление) (и себе го прикрутил на один из дыух пхпбб) просто высказал мнение что странное оно
а поповожу проксей ну блоклст прокси пока никто неотменял :) хотя конечно понятно это дикая нгрузка на хостинг и многие хостеры пошлют нах с такой нагрузкой

да и брутфорс акаунта юзера это баловство самих же юзеров (типа почитать что другой в пм пишет) и ничего более ибо даже на акаунт админа админ пароль и пароль обычный Должны различатся. это элементарные правила. так же как и то что например модерами должны быть только люди определенного уровня знаний веб технологий но это имхо ибо реализовать это на практике такое малореально (не у всех есть возможность сидеть в админ панели 24/7 и в модерах и младшем админе иметь програмеров :) )


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

Copyright © 2005 by Soniks