Ir para conteúdo
Fórum Script Brasil
  • 0

Bloqueio de invasão


carlosmandra

Pergunta

Pessoal,

to estudando aqui como bloquear algumas query_strings e requisicoes no site (recentemente fui alvo de invasao utilizando "union all"), e cheguei ao seguinte script:

<?php 
// primeiro checa se o ip tem histórico de ataque:
if($_SERVER['REMOTE_ADDR'] == "XXXXXXXXXX"){
    header("Location: http://www.google.com/");
}


if(isset($_SERVER['QUERY_STRING']) && ($_SERVER['QUERY_STRING']!="")){
    
    $variaveis = $_SERVER['QUERY_STRING'];
    $array1 = strtolower(explode("=", $variaveis));
    
    $badwords = "or cmd select insert update delete drop where -- login like table alter cast convert exec chr( union schema database outfile admin administracao echo";
    $array2 = explode(" ", $badwords);
        
    $array_resultado = array();
    foreach($array1 as $key => $value)
        {
            if(array_key_exists($key, $array2)){ 
            header("Location: http://www.google.com/");
            }
        } 
}
?>

Isso tá certo? Como adicionar também essa proteção ao envio de POST?

Abraço!

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Rafael...isso não funciona para todos os bancos de dados.No caso dele provavelmente vai funcionar (MySQL),mas tente não supor isso (disse provavelmente por que ele pode estar pegando os dados dos request através de Super-Globais independentes dessas 3 [a _REQUEST e a HTTP_*_VARS por exemplo]).Em aplicações maiores é legal esse comportamento ser polimorfico (implementado por exemplo no 'Adapter' de cada banco de dados).

E me lembro de também ter te indicado pra moderação da i...o.O...que que houve?;] [eibon]

---

Carlos...sua proteção está toda errada e é incrivelmente falha.Não vou comentar os erros de código (acredite,são muitos e feios),mas sim gafes de segurança...

-Você confiou em um recurso Browser-Specific (o header Location) para 'tirar o usuario de lá antes que ele fizesse algo'.Mas e se o que eu usar não interpretar esse header (o netcat por exemplo)?

-O que chega a sua aplicação é a Query-String decodificada,e não ela em si,portanto eu poderia burlar sua proteção codificando minhas injeções em hexadecimal.

-Você fez uma busca Case-Sensitive,enquanto o seu DBMS provavelmente interpreta os comandos de forma Case-Insensitive.

De resto...não acho legal fazer isso em todo e qualquer valor de um request dessa forma.Consome muita memória.E a solução do Rafael também é bem mais robusta que a sua...considere a aplicar no lugar (remodelar seu sistema apesar de recomendavel consumiria tempo),caso não o queira fazer,diga o que deseja que postarei o código aqui para você.

E faça sua aplicação exibir 'dados HTML' literalmente,ou os remova.

A...e se não delimitar tudo como Strings (como você já faz [má prática]),continua falho.

;D

Editado por proust
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...