PHP - bloquear IP?

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:
 
<?php
$ip=$_SERVER['REMOTE_ADDR'];
$deny_ip="127.0.";
if($ip==$deny_ip){
echo "acesso negado";
exit;
}
if(sizeof(explode($deny_ip,$ip))!=1){
echo "acesso negado";
exit;
}

echo "acesso permitido";
?>

so testei com o ip 127.0.0.1, e funcionou

espero ter ajudado
 
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
 
Isso o melhor é fazer por .htaccess
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.
 
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

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:
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
ok :009::009::009: a funcionar

OBRIGADO
 
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:
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...
 
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...
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
 
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
 
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>";
?>
 
Back
Topo