julho
20
2006

Segurança

Posted In: home by elm

É incrível como por mais que façamos testes e temos a segurança em mente no desenvolvimento de sistemas sempre alguma coisa “escapa”. O amigo William percebeu um problema em um script que estou usando aqui no meu site para demonstrar os códigos php de uma maneira mais organizada.

No script era passado o nome do arquivo para ser formatado. No início do script tomei o cuidado de verificar se somente arquivos de determinados formatos fossem visualizados. Para isso usei o seguinte código:

$file = $_GET[file];
$extensao = strtolower(end(explode(’.', $file)));
if($extensao != ‘php’ && $extensao != ‘html’ && $extensao != ‘htm’ && $extensao != ‘css’ && $extensao != ‘js’) {
echo “Somente arquivos php”;
exit;
}

Assim somente códigos php, html, htm, css e js podem ser visualizados. Mas mesmo assim estes arquivos podem conter informações importantes como senhas de bancos de dados, nomes de usuários, etc. Assim, este código não estava impedindo que fosse passado como parâmetro o caminho completo de um arquivo como por exemplo:

showphp.php?file=../wp-config.php

Este arquivo contém todas as configurações do wordpress, inclusive nome de usuário e senha da base de dados. Para resolver esse problema usei uma configuração do servidor Apache onde está hospedado meu site. Coloquei o trecho abaixo no arquivo httpd.conf:

< Directory "/home/elm/public_html/codes/" >
php_admin_value open_basedir /home/elm/public_html/codes
< /Directory >
Desta forma se alguém tentar usar o showcodes.php para tentar visualizar arquivos em outras pastas receberá um erro dizendo que o script não tem permissão de acessar outros diretórios. É o que faz a função open_basedir, dizendo que todos os scripts existentes dentro do diretório codes só podem acessar arquivos no diretório codes. No arquivo php.ini também é possivel configurar esta variável para restringir o acesso mas fazendo desta forma todos os scripts do servidor são atingidos. Usando da forma que eu fiz, no apache e indicando o diretório eu não altero o comportamento de scripts de outros usuários do servidor.

2 Comments

Realmente cara, trabalhamos com isso tudos os dias. Sempre desenvolvendo códigos e fazendo testes para evitar qualquer tipo de ataque. Mas sempre passa alguma coisa.
Ainda bem que não estamos sozinhos, somos uma comunidade e sempre um acabam ajudando o outro.

Abração!

Hohoho Elton!
Isso acontece mesmo!
Podem me chamar de louco, mas eu sempre faço um dicionário com uma identificação numérica nesse tipo de caso(ex: showcode.php?code=534)…
Mesmo tomando as medidas cabíveis, fico com medo que eu não tenha visto todas as medidas cabíveis, e não arrisco!
Abração aí tchê!

Something to say?

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.