Oficina

Quebra-fogo versão 1.1

Qua

18

Mar

2009


21:08

  • Imprimir
(1 voto de 5.00) 


Nível Intermediário

A versão 1.0 do nosso quebra-fogo serviu como aperitivo. Quando você fez o teste, se tudo funcionou como devia, você caiu no limbo só que... qual é a graça de tudo isto se não tem como saber quem mais foi apanhado? Taí a versão 1.1 para matar esta curiosidade, além de dar mais uma incrementada no script.

info As informações e explicações dadas no tutorial anterior (Quebra-fogo versão 1.0) não serão repetidas neste tutorial. Caso tenha dúvidas, leia novamente o texto da versão 1.0.

Monitorando os flagrados

Arquivos de log são excelentes para monitorar o que anda acontecendo, só que tem um detalhe: é preciso fazer a manutenção destes arquivos por que crescem indefinidamente. Mensagens de email também são excelentes para monitorar o que anda acontecendo... e você só precisa limpar sua caixa de mensagens. Qual dos dois métodos é o melhor? Na minha opinião, os dois!

Um arquivo de log

Para criar um arquivo de log basta adicionar algumas linhas ao script:

Observe que foram adicionadas as linhas 44/45 e 59/63 no script original. As primeiras duas servem para indicar a página que foi acessada, de onde pode partir um possivel ataque.

As linhas 59 a 63 servem para abrir um arquivo chamado quebrafogo.log no mesmo diretório onde se encontram os scripts. A função fopen devolve um manipulador para o arquivo de log abrindo-o para escrita; caso não exista, cria um. Para que o arquivo possa ser criado é preciso alterar as permissões do diretório quebrafogo para chmod 777, ou seja, habilitá-lo para leitura, execução e escrita.

Se tudo estiver preparado, faça um teste chamando qualquer página protegida do site com uma tentativa de injeção, por exemplo, pagina_do_site.php/?cmd=. Depois de ter sido redirecionado para o limbo, verifique o diretório quebrafogo. Lá você deve encontrar o arquivo quebrafogo.log. Dê uma olhada no conteúdo deste arquivo, que deve mostrar o log do seu ataque de teste.

200.59.128.46 | http://www.seusite.com.br/ | cmd= | 19-03-2009 12:10:07

info Lembre-se: se você receber apenas uma página em branco, isto significa que seu script tem algum erro.


Recebendo avisos por email

Enviar emails via PHP não é nenhum bicho de sete cabeças. Podemos incluir o código necessário no script filtro.php ou, para não deixar o código atravancado demais, podemos criar um novo script que será incorporado ao script principal se necessário. Prefiro a segunda opção, mesmo porque a manutenção do sistema quebra-fogo fica mais fácil de ser feita.

Em primeiro lugar vamos adicionar mais uma variável ao script principal que conterá o endereço de email para o qual as mensagens devem ser enviadas. Por exemplo:

// Path para o script $caminho = '/caminho/absoluto/para/filtro/'; // Endereço de email $email = 'webmaster@seudomínio.com.br';

O script acessório para enviar emails é o seguinte:

\n"; $cab .= "Reply-To: <" . $email . ">\n"; $cab .= "Return-Path: <" . $email . ">\n"; $cab .= "Envelope-from: <" . $email . ">\n"; $cab .= "Content-Type: text/plain; charset=iso-8859-1\n"; $cab .= "MIME-Version: 1.0\n"; mail( $email, $assunto, $mensagem, $cab ); } ?>

Crie este novo script e o coloque no diretório quebrafogo. Depois disto, é só dar um trato no script principal para que o arquivo enviar_email.php seja acionado:

... // Jogar no limbo require_once( $caminho . 'limbo.php' ); // Enviar email require_once( $caminho . 'enviar_mail.php'); exit(); ...

Faça um novo teste para ser notificado por email. Taí a versão 1.1 do quebra-fogo que, com duas pequenas alterações, nos oferece muito mais. Além de bloquearmos uma porção de porcaria, agora conseguimos coletar informações do modo como os hackers, crackers e spammers costumam agir. É um grande passo, mas ainda não é tudo. Me aguardem, tem muita coisa que ainda pode ser feita e a versão 1.2 não deve demorar para sair.

Abraço a todos da vó Vicki vovo

Вадим Логофет Сбербанксковорода вок отзывы форумлобановский александр женаалександр лобановскийресторан никас купить столовуюникас сайт