$Date: 2006-06-08 17:11:50 +0100 (Thu, 08 Jun 2006) $
| > $Revision: 289 $
| > $Author: bfarber $
+---------------------------------------------------------------------------
|
| > Admin Logs Stuff
| > Module written by Matt Mecham
| > Date started: 11nd September 2002
|
| > Module Version Number: 1.0.0
| > DBA Checked: Mon 24th May 2004
+--------------------------------------------------------------------------
*/
if ( ! defined( 'IN_ACP' ) )
{
print "
Некорректный адрес
Вы не имеете доступа к этому файлу напрямую. Если вы недавно обновляли форум, вы должны обновить все соответствующие файлы.";
exit();
}
class ad_security
{
var $base_url;
/**
* Section title name
*
* @var string
*/
var $perm_main = "admin";
/**
* Section title name
*
* @var string
*/
var $perm_child = "security";
function auto_run()
{
$this->ipsclass->admin->nav[] = array( $this->ipsclass->form_code, 'Центр безопасности' );
//-----------------------------------------
// LOAD HTML
//-----------------------------------------
$this->html = $this->ipsclass->acp_load_template('cp_skin_security');
switch($this->ipsclass->input['code'])
{
default:
$this->ipsclass->admin->cp_permission_check( $this->perm_main.'|'.$this->perm_child.':' );
$this->security_overview();
break;
case 'stronghold':
$this->do_stronghold();
break;
case 'dynamic_images':
$this->do_dynamic_images();
break;
case 'acplink':
$this->do_acplink();
break;
case 'virus_check':
$this->anti_virus_check();
break;
case 'deep_scan':
$this->deep_scan();
break;
case 'list_admins':
$this->list_admins();
break;
case 'htaccess':
$this->do_htaccess();
break;
case 'confglobal':
$this->do_confglobal();
break;
case 'acprename':
$this->do_acprename();
break;
case 'acphtaccess':
$this->acphtaccess_form();
break;
case 'acphtaccess_do':
$this->acphtaccess_do();
break;
}
}
/*-------------------------------------------------------------------------*/
// ACP HTACCESS: Step two
/*-------------------------------------------------------------------------*/
function acphtaccess_do()
{
//-----------------------------------------
// INIT
//-----------------------------------------
$name = trim( $_POST['name'] );
$pass = trim( $_POST['pass'] );
$htaccess_pw = "";
$htaccess_auth = "";
//-----------------------------------------
// Check...
//-----------------------------------------
if ( ! $name or ! $pass )
{
$this->ipsclass->main_msg = "Вы должны полностью заполнить форму.";
$this->acphtaccess_form();
return;
}
//-----------------------------------------
// Format files...
//-----------------------------------------
$htaccess_auth = "AuthType Basic\n"
. "AuthName \"IPB ACP\"\n"
. "AuthUserFile " . ROOT_PATH . IPB_ACP_DIRECTORY . "/.htpasswd\n"
. "Require valid-user\n";
$htaccess_pw = $name . ":" . crypt( $pass, base64_encode( $pass ) );
if ( $FH = @fopen( ROOT_PATH . IPB_ACP_DIRECTORY . '/' . '.htpasswd', 'w' ) )
{
fwrite( $FH, $htaccess_pw );
fclose( $FH );
$FF = @fopen( ROOT_PATH . IPB_ACP_DIRECTORY . '/' . '.htaccess', 'w' );
fwrite( $FF, $htaccess_auth );
fclose( $FF );
$this->ipsclass->main_msg = "Файл защиты успешно создан.";
$this->security_overview();
}
else
{
$this->ipsclass->html .= $this->html->htaccess_data( $htaccess_pw, $htaccess_auth );
$this->ipsclass->admin->nav[] = array( '', '.htaccess АЦ' );
$this->ipsclass->admin->output();
}
}
/*-------------------------------------------------------------------------*/
// ACP HTACCESS: Step One
/*-------------------------------------------------------------------------*/
function acphtaccess_form()
{
//-----------------------------------------
// Show it
//-----------------------------------------
$this->ipsclass->html .= $this->html->htaccess_form();
$this->ipsclass->admin->nav[] = array( '', '.htaccess АЦ' );
$this->ipsclass->admin->output();
}
/*-------------------------------------------------------------------------*/
// Rename ACP directory
/*-------------------------------------------------------------------------*/
function do_acprename()
{
//-----------------------------------------
// Show it
//-----------------------------------------
$this->ipsclass->html .= $this->html->rename_admin_dir();
$this->ipsclass->admin->nav[] = array( '', 'Изменение директории админцентра' );
$this->ipsclass->admin->output();
}
/*-------------------------------------------------------------------------*/
// Change conf global
/*-------------------------------------------------------------------------*/
function do_confglobal()
{
//-----------------------------------------
// INIT
//-----------------------------------------
$done = 0;
//-----------------------------------------
// Try...
//-----------------------------------------
if ( @chmod( ROOT_PATH . 'conf_global.php', 0444) )
{
$done = 1;
}
//-----------------------------------------
// Wow, that was really hard. I deserve a
// payraise after this function...
//-----------------------------------------
if ( $done )
{
$this->ipsclass->main_msg = "CHMOD успешно изменен.";
}
else
{
$this->ipsclass->main_msg = "Невозможно продолжить операцию.
Пожалуйста, установите файлу «conf_global.php» при помощи FTP-программы атрибуты доступа (CHMOD) 0444.";
}
$this->security_overview();
}
/*-------------------------------------------------------------------------*/
// Add htaccess to non IPB dirs
/*-------------------------------------------------------------------------*/
function do_htaccess()
{
//-----------------------------------------
// INIT
//-----------------------------------------
$name = '.htaccess';
$msg = array();
$dirs = array( ROOT_PATH . 'cache',
ROOT_PATH . 'skin_acp',
ROOT_PATH . 'style_avatars',
ROOT_PATH . 'style_emoticons',
ROOT_PATH . 'style_images',
ROOT_PATH . 'style_captcha',
ROOT_PATH . 'uploads' );
$towrite = <<
Order allow,deny
Deny from all
#
EOF;
//-----------------------------------------
// Do it!
//-----------------------------------------
foreach( $dirs as $directory )
{
if ( $FH = @fopen( $directory . '/'. $name, 'w' ) )
{
fwrite( $FH, $towrite );
fclose( $FH );
$msg[] = "Запись «.htaccess» в директорию $directory...";
}
else
{
$msg[] = "Невозможно произвести запись в $directory...";
}
}
//-----------------------------------------
// Done...
//-----------------------------------------
$this->ipsclass->main_msg = implode( "
", $msg );
$this->security_overview();
}
/*-------------------------------------------------------------------------*/
// List admins
/*-------------------------------------------------------------------------*/
function list_admins()
{
//-----------------------------------------
// INIT
//-----------------------------------------
$content = "";
$groups = array();
$query = "";
$members = array();
//-----------------------------------------
// Get all admin groups...
//-----------------------------------------
$this->ipsclass->DB->build_query( array( 'select' => '*',
'from' => 'groups',
'where' => 'g_access_cp > 0 AND g_access_cp IS NOT NULL' ) );
$o = $this->ipsclass->DB->exec_query();
while( $row = $this->ipsclass->DB->fetch_row( $o ) )
{
$_gid = intval( $row['g_id'] );
# I hate looped queries, but this should be OK.
$this->ipsclass->DB->build_query( array( 'select' => '*',
'from' => 'members',
'where' => "mgroup=" . $_gid ." OR mgroup_others LIKE '%,". $_gid .",%' OR mgroup_others='".$_gid."' OR mgroup_others LIKE '".$_gid.",%' OR mgroup_others LIKE '%,".$_gid."'",
'order' => 'joined DESC' ) );
$b = $this->ipsclass->DB->exec_query();
while( $member = $this->ipsclass->DB->fetch_row( $b ) )
{
if ( ! $member['mgroup'] AND ! $member['mgroup_others'] )
{
continue;
}
$members[ $member['id'] ] = $member;
}
$groups[ $row['g_id'] ] = $row;
}
//-----------------------------------------
// Generate list
//-----------------------------------------
foreach( $members as $id => $member )
{
$member['members_display_name'] = $member['members_display_name'] ? $member['members_display_name'] : $member['name'];
$member['_mgroup'] = $this->ipsclass->cache['group_cache'][ $member['mgroup'] ]['g_title'];
$_tmp = array();
$member['_joined'] = $this->ipsclass->get_date( $member['joined'], 'JOINED' );
foreach( explode( ",", $member['mgroup_others'] ) as $gid )
{
if ( $gid )
{
$_tmp[] = $this->ipsclass->cache['group_cache'][ $gid ]['g_title'];
}
}
$member['_mgroup_others'] = implode( ", ", $_tmp );
$content .= $this->html->list_admin_row( $member );
}
$this->ipsclass->html .= $this->ipsclass->skin_acp_global->information_box( "Пользователи, имеющие доступ в АЦ", "Ниже приведен список пользователей, которые имеют доступ в админцентр.
Если в списке присутствуют пользователи, которые не должны иметь доступ в админцентр, вы можете исправить это, нажав «Изменить» рядом с нужной учетной записью." ) ."
";
$this->ipsclass->html .= $this->html->list_admin_overview( $content );
$this->ipsclass->admin->nav[] = array( '', 'Список администраторов' );
$this->ipsclass->admin->output();
}
/*-------------------------------------------------------------------------*/
// Deep scan
/*-------------------------------------------------------------------------*/
function deep_scan()
{
//-----------------------------------------
// INIT
//-----------------------------------------
$filter = trim( $this->ipsclass->input['filter'] );
$file_count = 0;
$bad_count = 0;
$content = "";
$checked_content = "";
$colors = array( 0 => '#84ff00',
1 => '#84ff00',
2 => '#b5ff00',
3 => '#b5ff00',
4 => '#ffff00',
5 => '#ffff00',
6 => '#ffde00',
7 => '#ffde00',
8 => '#ff8400',
9 => '#ff8400',
10 => '#ff0000' );
//-----------------------------------------
// Get class
//-----------------------------------------
require_once( ROOT_PATH . 'sources/classes/class_virus_checker.php' );
$class_virus_checker = new class_virus_checker();
$class_virus_checker->ipsclass =& $this->ipsclass;
//-----------------------------------------
// Run it...
//-----------------------------------------
$class_virus_checker->anti_virus_deep_scan( ROOT_PATH, '(php|cgi|pl|perl|php3|php4|php5|php6)' );
//-----------------------------------------
// Update...
//-----------------------------------------
$cache = $this->ipsclass->DB->simple_exec_query( array( 'select' => '*', 'from' => 'cache_store', 'where' => "cs_key='systemvars'" ) );
$cache_array = unserialize(stripslashes($cache['cs_value']));
$cache_array['last_deepscan_check'] = time();
$this->ipsclass->update_cache( array( 'name' => 'systemvars',
'value' => $cache_array,
'array' => 1,
'donow' => 1 ) );
//-----------------------------------------
// Got any bad files?
//-----------------------------------------
if ( is_array( $class_virus_checker->bad_files ) and count( $class_virus_checker->bad_files ) )
{
foreach( $class_virus_checker->bad_files as $idx => $data )
{
$file_count++;
$_data = array();
$_info = stat( $data['file_path'] );
$_data['size'] = filesize( $data['file_path'] );
$_data['human'] = ceil( $_data['size'] / 1024 );
$_data['mtime'] = $this->ipsclass->get_date( $_info['mtime'], 'SHORT' );
$_data['score'] = $data['score'];
$_data['left_width'] = $data['score'] * 5;
$_data['right_width'] = 50 - $_data['left_width'];
$_data['color'] = $colors[ $data['score'] ];
if ( $data['score'] >= 7 )
{
$bad_score++;
}
if ( strstr( $filter, 'score' ) )
{
$_filter = intval( str_replace( 'score-', '', $filter ) );
if ( $data['score'] < $_filter )
{
continue;
}
}
else if ( $filter == 'large' )
{
if ( $_data['human'] < 55 )
{
continue;
}
}
else if ( $filter == 'recent' )
{
if ( $_info['mtime'] < time() - 86400 * 30 )
{
continue;
}
}
else if ( $filter == 'all' )
{
}
else
{
$filter = "";
}
if ( strtoupper( substr(PHP_OS, 0, 3) ) == 'WIN' )
{
$file_path = str_replace( ROOT_PATH, "", $data['file_path'] );
$file_path = str_replace( "\\", "/", $file_path );
$data['file_path'] = str_replace( "/\\", "\\", $data['file_path'] );
}
else
{
$file_path = str_replace( ROOT_PATH.'/', '', $data['file_path'] );
$data['file_path'] = str_replace( ROOT_PATH.'/', '', $data['file_path'] );
}
$content .= $this->html->deep_scan_bad_files_row( $file_path, $data['file_path'], $_data );
}
if ( $bad_score )
{
$this->ipsclass->html .= $this->ipsclass->skin_acp_global->warning_box( 'Используемые системой файлы', 'Сканер обнаружил следующие файлы.
'.$bad_score.' из '.$file_count.' файлов имеют рейтинг 7/10 и выше.
Если вам неизвестно происхождение какого-либо из файлов, мы рекомендуем вам их очень внимательно изучить.' ) . "
";
}
else
{
$this->ipsclass->html .= $this->ipsclass->skin_acp_global->information_box( 'Используемые системой файлы', 'Сканер проверил '.$file_count.' файлов.
Если вам неизвестно происхождение какого-либо из файлов, мы рекомендуем вам их очень внимательно изучить.' ) . "
";
}
$this->ipsclass->html .= $this->html->deep_scan_bad_files_wrapper( $content );
}
//-----------------------------------------
// Fix filter...
//-----------------------------------------
if ( $filter )
{
$this->ipsclass->html = preg_replace( "#(value=[\"']".preg_quote( $filter, '#' )."['\"])#i", "\\1 selected='selected'", $this->ipsclass->html );
}
$this->ipsclass->admin->nav[] = array( '', 'Сканер' );
$this->ipsclass->admin->output();
}
/*-------------------------------------------------------------------------*/
// Anti virus checker
/*-------------------------------------------------------------------------*/
function anti_virus_check()
{
//-----------------------------------------
// INIT
//-----------------------------------------
$content = "";
$checked_content = "";
$colors = array( 0 => '#84ff00',
1 => '#84ff00',
2 => '#b5ff00',
3 => '#b5ff00',
4 => '#ffff00',
5 => '#ffff00',
6 => '#ffde00',
7 => '#ffde00',
8 => '#ff8400',
9 => '#ff8400',
10 => '#ff0000' );
//-----------------------------------------
// Get class
//-----------------------------------------
require_once( ROOT_PATH . 'sources/classes/class_virus_checker.php' );
$class_virus_checker = new class_virus_checker();
$class_virus_checker->ipsclass =& $this->ipsclass;
//-----------------------------------------
// Run it...
//-----------------------------------------
$class_virus_checker->run_scan();
//-----------------------------------------
// Update...
//-----------------------------------------
$cache = $this->ipsclass->DB->simple_exec_query( array( 'select' => '*', 'from' => 'cache_store', 'where' => "cs_key='systemvars'" ) );
$cache_array = unserialize(stripslashes($cache['cs_value']));
$cache_array['last_virus_check'] = time();
$this->ipsclass->update_cache( array( 'name' => 'systemvars',
'value' => $cache_array,
'array' => 1,
'donow' => 1 ) );
//-----------------------------------------
// Got any bad files?
//-----------------------------------------
if ( is_array( $class_virus_checker->bad_files ) and count( $class_virus_checker->bad_files ) )
{
foreach( $class_virus_checker->bad_files as $idx => $data )
{
$_data = array();
$_info = stat( $data['file_path'] );
$_data['size'] = filesize( $data['file_path'] );
$_data['human'] = ceil( $_data['size'] / 1024 );
$_data['mtime'] = $this->ipsclass->get_date( $_info['mtime'], 'SHORT' );
$_data['score'] = $data['score'];
$_data['left_width'] = $data['score'] * 5;
$_data['right_width'] = 50 - $_data['left_width'];
$_data['color'] = $colors[ $data['score'] ];
if ( strtoupper( substr(PHP_OS, 0, 3) ) == 'WIN' )
{
$root_path = str_replace( "/", "\\", ROOT_PATH );
$file_path = str_replace( $root_path, "", $data['file_path'] );
$file_path = str_replace( "\\", "/", $file_path );
}
else
{
$file_path = str_replace( ROOT_PATH, '', $data['file_path'] );
}
$content .= $this->html->anti_virus_bad_files_row( $file_path, $data['file_path'], $_data );
}
$this->ipsclass->html .= $this->ipsclass->skin_acp_global->warning_box( 'Обнаружены подозрительные файлы', 'Ниже приведен список обнаруженных подозрительных файлов.
Если вы не уверены, что загружали их, то, пожалуйста, удалите их в целях безопасности.' ) . "
";
$this->ipsclass->html .= $this->html->anti_virus_bad_files_wrapper( $content );
}
else
{
$this->ipsclass->html .= $this->ipsclass->skin_acp_global->information_box( 'Подозрительные файлы не обнаружены', 'Сканер не обнаружил подозрительных файлов.
Пожалуйста, старайтесь как можно чаще проводить эту проверку.' ) . "
";
}
//-----------------------------------------
// Show checked folders...
//-----------------------------------------
if ( is_array( $class_virus_checker->checked_folders ) and count( $class_virus_checker->checked_folders ) )
{
foreach( $class_virus_checker->checked_folders as $name )
{
$checked_content .= $this->html->anti_virus_checked_row( str_replace( ROOT_PATH, '', $name ) );
}
$this->ipsclass->html .= $this->html->anti_virus_checked_wrapper( $checked_content );
}
$this->ipsclass->admin->nav[] = array( '', 'Проверка на вирусы' );
$this->ipsclass->admin->output();
}
/*-------------------------------------------------------------------------*/
// ACP LINK
/*-------------------------------------------------------------------------*/
function do_acplink()
{
//-----------------------------------------
// Update the setting...
//-----------------------------------------
$this->update_setting( 'security_remove_acp_link', $this->ipsclass->vars['security_remove_acp_link'] ? 0 : 1 );
//-----------------------------------------
// Done..
//-----------------------------------------
$lang = $this->ipsclass->vars['security_remove_acp_link'] == 0 ? 'восстановлена' : 'удалена';
$this->ipsclass->main_msg = "Ссылка на админцентр {$lang}.";
$this->security_overview();
}
/*-------------------------------------------------------------------------*/
// DYNAMIC IMAGES
/*-------------------------------------------------------------------------*/
function do_dynamic_images()
{
//-----------------------------------------
// Update the setting...
//-----------------------------------------
$this->update_setting( 'allow_dynamic_img', $this->ipsclass->vars['allow_dynamic_img'] ? 0 : 1 );
//-----------------------------------------
// Done..
//-----------------------------------------
$lang = $this->ipsclass->vars['allow_dynamic_img'] == 0 ? 'запрещены' : 'разрешены';
$this->ipsclass->main_msg = "Динамические изобаржения {$lang}.";
$this->security_overview();
}
/*-------------------------------------------------------------------------*/
// STRONG HOLD COOKIE
/*-------------------------------------------------------------------------*/
function do_stronghold()
{
//-----------------------------------------
// Update the setting...
//-----------------------------------------
$this->update_setting( 'cookie_stronghold', $this->ipsclass->vars['cookie_stronghold'] ? 0 : 1 );
//-----------------------------------------
// Done..
//-----------------------------------------
$lang = $this->ipsclass->vars['cookie_stronghold'] == 0 ? 'выключены' : 'включены';
$this->ipsclass->main_msg = "Защищеные cookie {$lang}.";
$this->security_overview();
}
/*-------------------------------------------------------------------------*/
// Update setting
/*-------------------------------------------------------------------------*/
function update_setting( $key, $value )
{
//-----------------------------------------
// Check
//-----------------------------------------
if ( ! $key )
{
return FALSE;
}
//-----------------------------------------
// Update DB
//-----------------------------------------
$this->ipsclass->DB->do_update( 'conf_settings', array( 'conf_value' => $value ), "conf_key='".$key."'" );
//-----------------------------------------
// Rebuild settings cache
//-----------------------------------------
require_once( ROOT_PATH . 'sources/action_admin/settings.php' );
$settings = new ad_settings();
$settings->ipsclass =& $this->ipsclass;
$settings->setting_rebuildcache();
//-----------------------------------------
// Done...
//-----------------------------------------
return TRUE;
}
/*-------------------------------------------------------------------------*/
// View current log in logs
/*-------------------------------------------------------------------------*/
function security_overview()
{
//-----------------------------------------
// INIT
//-----------------------------------------
$content = array( 'bad' => '', 'good' => '', 'ok' => '' );
$cache = $this->ipsclass->DB->simple_exec_query( array( 'select' => '*', 'from' => 'cache_store', 'where' => "cs_key='systemvars'" ) );
$cache_array = unserialize(stripslashes($cache['cs_value']));
//-----------------------------------------
// Virus checker link
//-----------------------------------------
if ( intval($cache_array['last_virus_check']) < time() - 7 * 86400 )
{
$content['bad'] .= $this->html->security_item_bad( 'Сканер подозрительных файлов',
'Сканер проверит наиболее часто используемые директории для загрузки файлов на подозрительные файлы.
Сканер на подозрительные файлы не запускали более недели.',
'Запустить',
$this->ipsclass->form_code_js.'&code=virus_check',
'vchecker' );
}
else
{
$last_run = $this->ipsclass->get_date( $cache_array['last_virus_check'], 'SHORT' );
$content['good'] .= $this->html->security_item_good( 'Сканер подозрительных файлов',
'Сканер проверит наиболее часто используемые директории для загрузки файлов на подозрительные файлы.
Последний запуск: '.$last_run,
'Запустить',
$this->ipsclass->form_code_js.'&code=virus_check',
'vchecker' );
}
//-----------------------------------------
// Deep scan link
//-----------------------------------------
if ( intval($cache_array['last_deepscan_check']) < time() - 30 * 86400 )
{
$content['bad'] .= $this->html->security_item_bad( 'Глубокое сканирование',
'Сканер проверит и выведет список всех файлов вашей системы.
Сканер не запускали более месяца.',
'Запустить',
$this->ipsclass->form_code_js.'&code=deep_scan',
'deepscan' );
}
else
{
$last_run = $this->ipsclass->get_date( $cache_array['last_deepscan_check'], 'SHORT' );
$content['good'] .= $this->html->security_item_good( 'Глубокое сканирование',
'Сканер проверит и выведет список всех файлов вашей системы.
Последний запуск: '.$last_run,
'Запустить',
$this->ipsclass->form_code_js.'&code=deep_scan',
'deepscan' );
}
//-----------------------------------------
// Get .htaccess settings
//-----------------------------------------
if ( strtoupper( substr(PHP_OS, 0, 3) ) !== 'WIN' )
{
$_extra = '';
if ( ! is_writeable( ROOT_PATH . IPB_ACP_DIRECTORY ) )
{
$_extra = "IPB не может произвести запись файла «.htaccess» в директорию админцентра. Пожалуйста, установите атрибуты доступа (CHMOD) 0777 на эту директорию при помощи FTP-программы.
";
}
if ( ! file_exists( ROOT_PATH . IPB_ACP_DIRECTORY . '/.htaccess' ) )
{
$content['ok'] .= $this->html->security_item_ok( 'Защита файлом «.htaccess» АЦ',
'Для повышения безопасности вы можете добавить HTTP-аутентификацию на директорию админцентра (по умолчанию: /admin/).
IPB не обнаружил «.htaccess» файл в директории админцентра.'. $_extra,
'Подробнее',
$this->ipsclass->form_code_js.'&code=acphtaccess',
'acphtaccess' );
}
else
{
$content['good'] .= $this->html->security_item_good( 'Защита файлом «.htaccess» АЦ',
'Для повышения безопасности вы можете добавить HTTP-аутентификацию на директорию админцентра (по умолчанию: /admin/).
IPB обнаружил «.htaccess» файл в директории админцентра.'.$_extra,
'Подробнее',
$this->ipsclass->form_code_js.'&code=acphtaccess',
'acphtaccess' );
}
# Other htaccess protection
if ( ! file_exists( ROOT_PATH . 'style_emoticons/.htaccess' ) )
{
$content['ok'] .= $this->html->security_item_ok( 'Защита файлом «.htaccess»',
'IPB может записать файл «.htaccess» в директории, где не содержатся php-файлы, препятствуя тем самым запуску файлов PHP и CGI в этих директориях.
IPB не обнаружил какие-либо «.htaccess» файлы.',
'Запустить',
$this->ipsclass->form_code_js.'&code=htaccess',
'htaccess' );
}
else
{
$content['good'] .= $this->html->security_item_good( 'Защита файлом «.htaccess»',
'IPB может записать файл «.htaccess» в директории, где не содержатся php-файлы, препятствуя тем самым запуску файлов PHP и CGI в этих директориях.
IPB обнаружил «.htaccess» файлы.',
'Запустить',
$this->ipsclass->form_code_js.'&code=htaccess',
'htaccess' );
}
//-----------------------------------------
// Conf global
//-----------------------------------------
if ( is_writeable( ROOT_PATH . 'conf_global.php' ) )
{
$content['bad'] .= $this->html->security_item_bad( 'Запись в файл «conf_global»',
'После установки IPB рекомендуется изменить атрибуты доступа к файлу «conf_global.php», чтобы другие пользователи не могли произвести чтение или запись.
«conf_global.php» доступен для записи.',
'Запустить',
$this->ipsclass->form_code_js.'&code=confglobal',
'confglobal' );
}
else
{
$content['good'] .= $this->html->security_item_good( 'Запись в файл «conf_global»',
'После установки IPB рекомендуется изменить атрибуты доступа к файлу «conf_global.php», чтобы другие пользователи не могли произвести чтение или запись.
«conf_global.php» недоступен для записи.',
'Запустить',
$this->ipsclass->form_code_js.'&code=confglobal',
'confglobal' );
}
}
//-----------------------------------------
// Dynamic images
//-----------------------------------------
if ( ! $this->ipsclass->vars['allow_dynamic_img'] )
{
$content['good'] .= $this->html->security_item_good( 'Отключение динамических изображений',
'IP.Board может запретить использовать динамические изображения в сообщениях. Их использование в сообщениях подвергает большому риску безопасность вашего форума.
Динамические изображения в данный момент запрещены.',
'Исправить',
$this->ipsclass->form_code_js.'&code=dynamic_images',
'dynamic_images' );
}
else
{
$content['bad'] .= $this->html->security_item_bad( 'Отключение динамических изображений',
'IP.Board может запретить использовать динамические изображения в сообщениях. Их использование в сообщениях подвергает большому риску безопасность вашего форума.
Динамические изображения РАЗРЕШЕНЫ.',
'Исправить',
$this->ipsclass->form_code_js.'&code=dynamic_images',
'dynamic_images' );
}
//-----------------------------------------
// Strong hold cookie
//-----------------------------------------
if ( ! $this->ipsclass->vars['cookie_stronghold'] )
{
$content['bad'] .= $this->html->security_item_bad( 'Защищенные cookies',
'IPB может записывать более защищенные cookies в браузер пользователя после его успешной авторизации, тем самым снижая вероятность их кражи злоумышленником.
Защищенные cookies отключены.',
'Исправить',
$this->ipsclass->form_code_js.'&code=stronghold',
'stronghold' );
}
else
{
$content['good'] .= $this->html->security_item_good( 'Защищенные cookies',
'IPB может записывать более защищенные cookies в браузер пользователя после его успешной авторизации, тем самым снижая вероятность их кражи злоумышленником.
Защищенные cookies включены.',
'Исправить',
$this->ipsclass->form_code_js.'&code=stronghold',
'stronghold' );
}
//-----------------------------------------
// Remove ACP link
//-----------------------------------------
if ( ! $this->ipsclass->vars['security_remove_acp_link'] )
{
$content['ok'] .= $this->html->security_item_ok( 'Удаление ссылки на админцентр',
'IPB может удалить ссылку «Админцентр» из пользовательской панели навигации на вашем форуме.
Данная ссылка отображается, когда пользователь авторизирован на форуме как администратор.',
'Исправить',
$this->ipsclass->form_code_js.'&code=acplink',
'acplink' );
}
else
{
$content['good'] .= $this->html->security_item_good( 'Удаление ссылки на админцентр',
'IPB может удалить ссылку «Админцентр» из пользовательской панели навигации на вашем форуме.
Данная ссылка отображается, когда пользователь авторизирован на форуме как администратор.
Ссылка на админцентр в данный момент удалена.',
'Исправить',
$this->ipsclass->form_code_js.'&code=acplink',
'acplink' );
}
//-----------------------------------------
// ACP directory renamed
//-----------------------------------------
if ( IPB_ACP_DIRECTORY == 'admin' )
{
$content['ok'] .= $this->html->security_item_ok( 'Название директории АЦ',
'Стандартную директорию админцентра (/admin/) можно переименовать — тем самым злоумышленнику будет сложнее нарушить работу форума в случае взлома учетной записи какого-либо из администраторов.
Директория админцентра не переименована.',
'Подробнее',
$this->ipsclass->form_code_js.'&code=acprename',
'acprename' );
}
else
{
$content['good'] .= $this->html->security_item_good( 'Название директории АЦ',
'Стандартную директорию админцентра (/admin/) можно переименовать — тем самым злоумышленнику будет сложнее нарушить работу форума в случае взлома учетной записи какого-либо из администраторов.
Директория админцентра переименована.',
'Подробнее',
$this->ipsclass->form_code_js.'&code=acprename',
'acprename' );
}
//-----------------------------------------
// Print...
//-----------------------------------------
$this->ipsclass->html .= $this->html->security_overview( $content );
$this->ipsclass->admin->output();
}
}
?>