xoops modulo protector
Introdução. O Básico
Nota 1: Não existe nada 100% SEGURO na Internet. Nos CMS que operam com banco de dados - XOOPS inclusive - é essencial fazer-se backups regulares do site [e sempre que houver alguma modificação], e especialmente do Banco de Dados, no caso MySQL. Você pode utilizar softwares próprios para isso, como o MySQLDumper , ou realizar backups utilizando o próprio phpmyadmin do CPANEL.
Nota 2: Nos CMS [e sistemas de fórum como phpbb, IPB, vBulletin, woltlab e outros] em geral, os arquivos que guardam os dados de configuração do banco de dados [usuário do banco de dados, senhas, informaçõs do administrador, por exemplo] são dos mais importantes para o sistema: e os que devem - por conter dados confidenciais - ser mais protegidos. No XOOPS este arquivo é o mainfile.php . De forma geral sempre que se for alterar um arquivo deve-se fazer backup em primeiro lugar: nas alterações que veremos abaixo (incluindo alterar o mainfile.php) isto é essencial. Uma linha errada e seu XOOPS IRÁ PARAR DE FUNCIONAR. Se você tiver o backup do(s) arquivos à mão, você pode restaurar o(s) arquivo(s) pelo backup e depois - com tranqüilidade - acertar o que estava errado.
Parte I. Antes de Instalar o Protector ... Criando XOOPS_TRUST_PATH
Para publicar um site na web, é necessário que os arquivos estejam dentro de uma pasta [public_html] [www] ou, ainda, [httpdocs]. Isso gera um problema para a segurança no caso de arquivos vitais do sistema.
O conceito do Xoops_Truth_Path, é criar uma pasta que fique fora da visão web [do acesso por web], ou seja, fora da pasta [httpdocs] ou [public_html][www] e onde os arquivos possam ficar armazenados com menor risco.
O nome Xoops_Truth_Path é apenas uma referência - como você verá nas figuras abaixo.. Imp: Qualquer nome poderá ser usado por você. Os exemplos abaixo são da visualização da estrutura básica de pastas em um painel tipo Plesk [figura 1] ou Cpanel [figura 2].
Figura 1 [Plesk]
Figura 2 [Cpanel]
Repare que nesse caso, a pasta xtrustpath (nome escolhido no exemplo, mas você pode colocar o nome de sua preferência) está fora da pasta www [ou public_html ou httpdocs], que é onde os arquivos de um site ficam.
Essa pasta será utilizada nos próximos passos, “Instalando o Protector” e “Protegendo seu arquivo mainfile.php”. Alguns módulos [em especial os criados por Gijoe - veja seu site clicando aqui- também requerem esta pasta para instalação, portanto sempre que for instalar um módulo, verifique as instruções para saber como proceder.
O que estamos dizendo é que você deve CRIAR [usando seu programa de FTP, ou pelo painel de controle do seu host] uma pasta como demonstrado acima.
Tendo você já feito isso ... está na hora de alterar o mainfile.php do seu XOOPS. Lembrou de fazer um backup deste fundamental arquivo? Não? Então faça ANTES do próximo passo.
Para alterar o mainfile.php de forma a usar o recurso XOOPS_TRUST_PATH você deve incluir a linha:
define('XOOPS_TRUST_PATH', '/caminho/xoopstrustpath*');
antes da linha:
// XOOPS Virtual Path(URL)
(* onde xoopstrustpath deve ser trocado pelo nome de sua pasta e '/caminho/' pelo caminho [path] de seu servidor. [Você percebeu que trocamos o nome xtrustpath para xoopstrustpath, não é? É claro que você deve usar o nome que criou para sua pasta com seu XOOPS_TRUS_PATH.]
Uma última lembranaça: ...Não esqueça do ponto e vírgula no fim e cuide para manter as aspas!)
Vejamos isto com imagens ...
- O mainfile.php ANTES de incluir o código definindo o caminho para o XOOPS_TRUST_PATH ...
Agora o mainfile já com o caminho para XOOPS_TRUST_PATH definido...
Nota: Lembre também de ler os arquivos de explicações que acompanham cada módulo. [pagebreak] Parte II . Instalando o Protector
Neste momento você já alterou o seu mainfile para operar com XOOPS_TRUST_PATH. Vamos ao segundo passo: instalar o Protector. Antes de mais nada verifique se você tem a última versão do Protector,
1. Visualização inicial:
2. Vamos olhar o conteúdo da pasta html [figura 1] e da pasta xoops_trust_path [figura 2] :
Pasta html:
Pasta XOOPS_TRUST_PATH:
Faça upload via FTP (COPIE), da seguitne forma:
Copie o conteúdo da pasta html/modules/protector (com sua estrutura de pastas e arquivos) para dentro de XOOPS_ROOT_PATH/modules/
Copie o conteúdo de xoops_trust_path/modules/protector (com sua estrutura de pastas e arquivos) para dentro de XOOPS_TRUST_PATH/modules/
Torne a pasta(e arquivos) em XOOPS_TRUST_PATH/modules/protector/configs com permissão de escrita [CHMOD 777]
Finalmente: Instale o módulo.
Agora temos que alterar o mainfile para o pré-check e post-check funcionarem. Voltemos ao mainfile então. Procure onde está a linha
if (!isset($xoopsOption['nocommon']) && XOOPS_ROOT_PATH != '' ) { include XOOPS_ROOT_PATH."/include/common.php"; }
Você irá incluir uma linha antes e depois dela. Veja a figura abaixo:
Se tudo correu bem, você irá ver que a configuração do mainfile está correta na 'Central de Segurança' do módulo. À esta altura você já deve estar se perguntando ... 'não seria interessante proteger o mainfile todo?'
Parte III: Protegendo o mainfile.php
Relembrando...
O mainfile.php é o arquivo que guarda toda a informação essencial do seu site, incluídas aí a senha e nome do usuário do seu banco de dados. E o nome do banco de dados, e o path [caminho físico] do seu site! Se você percebeu, ao editá-lo para instalar o protector, uma boa parte do que existe de fundamental a ser protegido está ali.E todos que já operaram com XOOPS SABEM que o mainfile está na raiz do seu site. Ou deveria estar. Mais uma razão para nos perguntarmos ... que tal tirar o mainfile da possibilidade de ser acessado pela WEB?
Movendo o mainfile
Na verdade é muito simples... Faça uma cópia do seu arquivo mainfile.php usado no site, e coloque essa cópia para a pasta 'xtrustpath'[veja Parte II].
Depois, substitua todo o conteúdo do mainfile.php original por :
require_once('/caminho/xtrustpath/mainfile.php') ?>
'Evolução' de um mainfile.php de exemplo: abaixo os detalhes...
Usaremos para esse exemplo um site que está hospedado em um servidor com cPanel:
O login do cPanel será : seulogincpanel ;
Banco de Dados: nome: nomebd ;
Usuário e senha desse banco de dados: nomeusuariobd e senhausuariobd;
Path: /home/seulogincpanel/public_html
O site é: http://meusite.com.br
Mainfile antes de qualquer alteração - fizemos a instalação normal do XOOPS e ele está assim:
if ( !defined("XOOPS_MAINFILE_INCLUDED") ) {
define("XOOPS_MAINFILE_INCLUDED",1); // XOOPS Physical Path
// Physical path to your main XOOPS directory WITHOUT trailing slash
// Example: define('XOOPS_ROOT_PATH', '/home/daeqhos/public_html');
define('XOOPS_ROOT_PATH', '/home/seulogincpanel/public_html');
// XOOPS Virtual Path (URL)
// Virtual path to your main XOOPS directory WITHOUT trailing slash
// Example: define('XOOPS_URL', 'http://meusite.com.br');
define('XOOPS_URL', 'http://meusite.com.br');
define('XOOPS_CHECK_PATH', 1);
// Protect against external scripts execution if safe mode is not enabled
if ( XOOPS_CHECK_PATH && !@ini_get('safe_mode') ) {
if ( function_exists('debug_backtrace') ) {
$xoopsScriptPath = debug_backtrace();
if ( !count($xoopsScriptPath) ) {
die("XOOPS path check: this file cannot be requested directly");
}
$xoopsScriptPath = $xoopsScriptPath[0]['file'];
} else {
$xoopsScriptPath = isset($_SERVER['PATH_TRANSLATED']) ? $_SERVER['PATH_TRANSLATED'] : $_SERVER['SCRIPT_FILENAME'];
}
if ( DIRECTORY_SEPARATOR != '/' ) {
// IIS6 may double the \ chars
$xoopsScriptPath = str_replace( strpos( $xoopsScriptPath, '\\\\', 2 ) ? '\\\\' : DIRECTORY_SEPARATOR, '/', $xoopsScriptPath);
}
if ( strcasecmp( substr($xoopsScriptPath, 0, strlen(XOOPS_ROOT_PATH)), str_replace( DIRECTORY_SEPARATOR, '/', XOOPS_ROOT_PATH)) ) {
exit("XOOPS path check: Script is not inside XOOPS_ROOT_PATH and cannot run.");
}
} // Database
// Choose the database to be used
define('XOOPS_DB_TYPE', 'mysql'); // Table Prefix
// This prefix will be added to all new tables created to avoid name conflict in the database. If you are unsure, just use the default 'xoops'.
define('XOOPS_DB_PREFIX', 'xoops'); // Database Hostname
// Hostname of the database server. If you are unsure, 'localhost' works in most cases.
define('XOOPS_DB_HOST', 'localhost'); // Database Username
// Your database user account on the host
define('XOOPS_DB_USER', 'seulogincpanel_nomedousuariobd'); // Database Password
// Password for your database user account
define('XOOPS_DB_PASS', 'senhausuariobd'); // Database Name
// The name of database on the host. The installer will attempt to create the database if not exist
define('XOOPS_DB_NAME', 'nomebd'); // Use persistent connection? (Yes=1 No=0)
// Default is 'Yes'. Choose 'Yes' if you are unsure.
define('XOOPS_DB_PCONNECT', 0); define('XOOPS_GROUP_ADMIN', '1');
define('XOOPS_GROUP_USERS', '2');
define('XOOPS_GROUP_ANONYMOUS', '3'); foreach ( array('GLOBALS', '_SESSION', 'HTTP_SESSION_VARS', '_GET', 'HTTP_GET_VARS', '_POST', 'HTTP_POST_VARS', '_COOKIE', 'HTTP_COOKIE_VARS', '_REQUEST', '_SERVER', 'HTTP_SERVER_VARS', '_ENV', 'HTTP_ENV_VARS', '_FILES', 'HTTP_POST_FILES', 'xoopsDB', 'xoopsUser', 'xoopsUserId', 'xoopsUserGroups', 'xoopsUserIsAdmin', 'xoopsConfig', 'xoopsOption', 'xoopsModule', 'xoopsModuleConfig', 'xoopsRequestUri') as $bad_global ) {
if ( isset( $_REQUEST[$bad_global] ) ) {
header( 'Location: '.XOOPS_URL.'/' );
exit();
}
}
if (!isset($xoopsOption['nocommon']) && XOOPS_ROOT_PATH != '') {
include XOOPS_ROOT_PATH."/include/common.php";
} }
?>
Com todas as alterações: XOOPS_TRUS_PATH criado como pasta 'aleluia' FORA da WEB...
if ( !defined("XOOPS_MAINFILE_INCLUDED") ) {
define("XOOPS_MAINFILE_INCLUDED",1); // XOOPS Physical Path
// Physical path to your main XOOPS directory WITHOUT trailing slash
// Example: define('XOOPS_ROOT_PATH', '/home/daeqhos/public_html');
define('XOOPS_ROOT_PATH', '/home/seulogincpanel/public_html');
// definindo o XOOPS_TRUST_PATH - basico para o protector
define('XOOPS_TRUST_PATH','/home/seulogincpanel/aleulia');
// XOOPS Virtual Path (URL)
// Virtual path to your main XOOPS directory WITHOUT trailing slash
// Example: define('XOOPS_URL', 'http://meusite.com.br');
define('XOOPS_URL', 'http://meusite.com.br'); define('XOOPS_CHECK_PATH', 1);
// Protect against external scripts execution if safe mode is not enabled
if ( XOOPS_CHECK_PATH && !@ini_get('safe_mode') ) {
if ( function_exists('debug_backtrace') ) {
$xoopsScriptPath = debug_backtrace();
if ( !count($xoopsScriptPath) ) {
die("XOOPS path check: this file cannot be requested directly");
}
$xoopsScriptPath = $xoopsScriptPath[0]['file'];
} else {
$xoopsScriptPath = isset($_SERVER['PATH_TRANSLATED']) ? $_SERVER['PATH_TRANSLATED'] : $_SERVER['SCRIPT_FILENAME'];
}
if ( DIRECTORY_SEPARATOR != '/' ) {
// IIS6 may double the \ chars
$xoopsScriptPath = str_replace( strpos( $xoopsScriptPath, '\\\\', 2 ) ? '\\\\' : DIRECTORY_SEPARATOR, '/', $xoopsScriptPath);
}
if ( strcasecmp( substr($xoopsScriptPath, 0, strlen(XOOPS_ROOT_PATH)), str_replace( DIRECTORY_SEPARATOR, '/', XOOPS_ROOT_PATH)) ) {
exit("XOOPS path check: Script is not inside XOOPS_ROOT_PATH and cannot run.");
}
} // Database
// Choose the database to be used
define('XOOPS_DB_TYPE', 'mysql'); // Table Prefix
// This prefix will be added to all new tables created to avoid name conflict in the database. If you are unsure, just use the default 'xoops'.
define('XOOPS_DB_PREFIX', 'xoops'); // Database Hostname
// Hostname of the database server. If you are unsure, 'localhost' works in most cases.
define('XOOPS_DB_HOST', 'localhost'); // Database Username
// Your database user account on the host
define('XOOPS_DB_USER', 'seulogincpanel_nomedousuariobd'); // Database Password
// Password for your database user account
define('XOOPS_DB_PASS', 'senhausuariobd'); // Database Name
// The name of database on the host. The installer will attempt to create the database if not exist
define('XOOPS_DB_NAME', 'nomebd'); // Use persistent connection? (Yes=1 No=0)
// Default is 'Yes'. Choose 'Yes' if you are unsure.
define('XOOPS_DB_PCONNECT', 0); define('XOOPS_GROUP_ADMIN', '1');
define('XOOPS_GROUP_USERS', '2');
define('XOOPS_GROUP_ANONYMOUS', '3'); foreach ( array('GLOBALS', '_SESSION', 'HTTP_SESSION_VARS', '_GET', 'HTTP_GET_VARS', '_POST', 'HTTP_POST_VARS', '_COOKIE', 'HTTP_COOKIE_VARS', '_REQUEST', '_SERVER', 'HTTP_SERVER_VARS', '_ENV', 'HTTP_ENV_VARS', '_FILES', 'HTTP_POST_FILES', 'xoopsDB', 'xoopsUser', 'xoopsUserId', 'xoopsUserGroups', 'xoopsUserIsAdmin', 'xoopsConfig', 'xoopsOption', 'xoopsModule', 'xoopsModuleConfig', 'xoopsRequestUri') as $bad_global ) {
if ( isset( $_REQUEST[$bad_global] ) ) {
header( 'Location: '.XOOPS_URL.'/' );
exit();
}
}
include XOOPS_TRUST_PATH.'/modules/protector/include/precheck.inc.php' ;
if (!isset($xoopsOption['nocommon']) && XOOPS_ROOT_PATH != '' ) {
include XOOPS_ROOT_PATH."/include/common.php";
}
include XOOPS_TRUST_PATH.'/modules/protector/include/postcheck.inc.php' ;
}}
?>
E finalmente com a transmutação do mainfile [e copia do original para a pasta 'aleluia' - NÃO ESQUEÇA DE FAZER BACKUP], temos :
require_once('/home/seulogincpanel/aleluia/mainfile.php')
Libellés : XOOPS