1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

PHP - bloquear IP?

Discussão em 'Web Development' iniciada por master-chief, 24 de Junho de 2008. (Respostas: 15; Visualizações: 2128)

  1. master-chief

    master-chief Power Member

    (acabei de fazer uma procura no forum e nao encontrei nada que ajudasse :'( )
    queria saber como fazer um bloq de ip's?
    ja pesquisei na net...em muitos sites e apenas um dos codigos esta a funcionar relativamente bem.
    -----------------------------
    <?php
    $deny = array("20.14.0.323");
    if (in_array ($_SERVER['REMOTE_ADDR'], $deny)) {
    header("location: http://www.google.pt");
    exit();
    } ?>
    ------------------------------
    o que queria era, bloquear a partir de um determinado numero. acho que se cham wild cards, pelo que ja li, so que nao consigo por a funcionar. Ja testei a partir do meu Ip e nao deu.
    Seria qualquer coisa como:
    "20.*"
    para bloquear todos os ip's que começam com o 20?

    obrigado a quem souber explicar-me isto
    :x2:
     
  2. master-chief

    master-chief Power Member

    vou testar agr daniel, ja digo alguma coisa :)
     
  3. master-chief

    master-chief Power Member

    daniel, esta a funcionar.
    outra coisa, que deves saber como se faz.
    É possivel definir uma página para redireccionar os IP's bloqueados? de forma a que quem está a ser colocado fora do site nao se aperceba :)
    obrigado
     
  4. anjo2

    anjo2 Power Member

    Isso o melhor é fazer por .htaccess
     
  5. master-chief

    master-chief Power Member

    boas,
    pois, mas eu ja tentei por .htaccess e nao consegui.
    os unicos codigos que fui testando e que sao bem mais faceis para mim :p sao deste tipo que o daniel fez, o chamado copy+paste
    Este de momento está optimo, apenas faltado um redireccionamento para outra pagina.
     
  6. basta substituir a funcao exit; por
    PHP:
    echo '
    <script type="text/javascript">
    <!--
    window.location = "http://www.google.com/"
    //-->
    </script>
    '
    ;
    pelo .htaccess

    [SIZE=-2]order allow,deny
    deny from 127.0
    allow from all
    [/SIZE]

    bloqueia todos os ip's desde 127.0.0.0 até 127.0.255.255, mas depois não sei como se faz a parte de redireccionar
     
    Última edição: 24 de Junho de 2008
  7. The Lavigne

    The Lavigne Banido

    Hum isto pode ser útil para o meu Website. :P

    Os ips estrangeiros podem ser bloqueados desta forma?



    Abraços.
     
  8. master-chief

    master-chief Power Member

    ok :009::009::009: a funcionar

    OBRIGADO
     
  9. master-chief

    master-chief Power Member

    estou com novo problema. segui o que o daniel escreveu de codigo, e alterei com a ultima informacao dele sobre o redireccionar. Colocando apenas o meu IP como restricao, o codigo funciona e envia-me para outro sitio. Mas ao adicionar a lista de IP's que eu quero bloquear ele deixa de funcionar, e deixa-me entrar na pagina que eu nao quero entrar!
    o codigo esta assim:

    <?php
    $ip=$_SERVER['REMOTE_ADDR'];
    $deny_ip=
    "58.";
    "59.";
    "60.";
    "61.";
    "116.";
    "117.";
    "121.";
    "122.";
    "222.";
    "62."; ----------este é o meu IP como testes
    if($ip==$deny_ip){
    echo "acesso negado";

    }
    if(sizeof(explode($deny_ip,$ip))!=1){
    echo "Attention: error link";
    echo '
    <script type="text/javascript">
    <!--
    window.location = "http://google.com/ "
    //-->
    </script>
    ';
    }

    echo "acesso permitido";
    ?>


    -------------
    Alguem pode dar uma ajuda?
    Obrigado pessoal
     
    Última edição: 27 de Junho de 2008
  10. anjo2

    anjo2 Power Member

    desculpa lá, mas se tiveres 58. no meio do domínio não te vai bloquear à mesma? Não cheguei a testar, mas olhando para o código parece que sim...
     
  11. master-chief

    master-chief Power Member

    eu puz o codigo como ai esta...com o "62."; para me bloquear de aceder à pagina...mas nao me bloqueia.
    se colocar o meu Ip completo, ai sim ele bloqueia e redirecciona
     
  12. anjo2

    anjo2 Power Member

    Porque não podes fazer assim, tens de criar um array e percorrer o array.
     
  13. m.costa

    m.costa Power Member

    2 problemas com isso: 1º nao podes definir os IPs a bloquear daquela maneira, tens de os por numa array; 2º o metodo que te mostraram não e' muito adequado pq como disseram se tiveres um ip XXX.XXX.58.XXX bloqueia na mesma.

    Tens de usar algo tipo isto:

    PHP:

    $ip
    =$_SERVER['REMOTE_ADDR'];
    $deny_ip= array(
    "58.",
    "59.",
    "60.",
    "61.",
    "116.",
    "117.",
    "121.",
    "122.",
    "222.",
    "62.");

    foreach (
    $deny_ip as $_ip)
      if (
    substr($ip,0,strlen($_ip)) == $_ip)
        echo 
    "acesso negado";

    Assim podes ter vários IPs numa array e adicionar mais, e vai sempre testar contra o inicio de cada ip, e não ha' o problema que o anjo2 disse de se tiveres aqueles numeros no meio do IP bloquear na mesma
     
  14. deixo aqui uma "actualização" e esta parece-me melhor, se alguém poder testar e verificar os bugs agradecia.

    PHP:
    <?php
    function format_ip($ip){
        return 
    str_replace("*",".*",$ip);
    }


    $deny_ips_array=array(
        
    "127.*.0.*"
    );
    foreach(
    $deny_ips_array as $deny_ip){
        if(
    ereg(format_ip($deny_ip),$_SERVER['REMOTE_ADDR'])){
            echo 
    "Attention: error link";
            echo 
    '
                <script type="text/javascript">
                <!--
                window.location = "http://google.com/ "
                //-->
                </script>
            '
    ;
            exit;
        }
    }
    echo 
    "<center>Página WEB</center>";
    ?>
     

Partilhar esta Página