• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

keepz

Banir ip

27 mensagens neste tópico

Boa tarde

Eu, atravaes de php, e ja adqirido o ip, queria saber como posso banir esse ip do meu site durante um  X tempo.

Obrigado pela colaboração, cumpz

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Usas uma bd com um campo para o ip e outro com a hora em que esse ip pode voltar a aceder á página, enquanto esse tempo não passar mostras-lhe uma mensagem a dizer que não pode aceder.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

<?
include('connectdb.php');

if(isset($_COOKIE['Key_my_site'])) {
    $username = $_COOKIE['Id_my_site'];
    $query=mysql_query("SELECT tempo FROM users WHERE username='".$username." ' ");
while (mysql_num_rows($query) < 0):

echo " Banned ";

endwhile;
}
else{

echo " not banned ";

}

?>



Tipo isto ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não.

Na base de dados guardas o IP e a DATA, depois seleccionas o registo onde o IP é igual ao IP que está a aceder o site, onde a Data ainda se encontra dentro do prazo de "Ban".


$q = mysql_query('SELECT id FROM user WHERE ip = "'.$_SERVER['REMOTE_ADDR'].'" AND data>NOW() LIMIT 1');

echo mysql_num_rows( $q ) ? 'banido' : 'n banido';

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se puderes, bloqueia o IP na Firewall.

Não sei o que é que estás a tentar obter, mas repara neste cenário (para a solução proposta nos posts anteriores): um utilizador brincalhão está a 'brincar' com o teu site e faz, de rajada, umas centenas de requests ao www.teusite.com. Se por cada request vais à BD perguntar pelos IPs banidos o resultado pode não ser famoso... Ou seja, colocaste mais um problema em cima do problema.

A menos que queiras informar o utilizador que ele está impedido de visualizar o conteúdo do teu site por um período de tempo, o melhor é mesmo nem lhe dares resposta.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se puderes, bloqueia o IP na Firewall.

Não sei o que é que estás a tentar obter, mas repara neste cenário (para a solução proposta nos posts anteriores): um utilizador brincalhão está a 'brincar' com o teu site e faz, de rajada, umas centenas de requests ao www.teusite.com. Se por cada request vais à BD perguntar pelos IPs banidos o resultado pode não ser famoso... Ou seja, colocaste mais um problema em cima do problema.

A menos que queiras informar o utilizador que ele está impedido de visualizar o conteúdo do teu site por um período de tempo, o melhor é mesmo nem lhe dares resposta.

Apoiado!

shell_exec('iptables')

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não se esqueçam que não podem fazer isso num servidor partilhado. A melhor opção nestes casos é mesmo bloquear pelo .htaccess, redireccionando para uma página estática e cache-friendly a notificar da situação.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boa tarde

Eu, atravaes de php, e ja adqirido o ip, queria saber como posso banir esse ip do meu site durante um  X tempo.

Obrigado pela colaboração, cumpz

Deve haver problemas de leitura...  :dontgetit:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Deve haver problemas de leitura...  :dontgetit:

Não percebi essa. Ele pediu como fazer com PHP, teve uma resposta, e teve um conselho que era não recorrer a PHP, devido ao overhead que havia só para bloquear o utilizador. Qual é a espiga disso?
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hum, mas vocês dizem iptables, htaccess, etc, mas isso não é demasiado "estático" para bans temporários de utilizadores? É só um pensamento

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Uma ideia, seguindo a logica de um sistema de utilizadores online, podes alterar e criar um codigo para nao deixar esse ip visualizar a pagina durante X horas ou entao alojar um cookie no cliente, esse é menos eficaz pois o utilizador pode apagar o cookie (sim, com o ip tambem podem fazer reset ao modem e PODEM ficar com um novo ip em pouco tempo... mas... escolham lol )

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se o sistema usar sessões podes muito bem fazer uma query à BD apenas uma vez, depois guardas a lista de IPs banidos numa variável de sessão e pronto, não será preciso estar sempre a ir à BD...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se o sistema usar sessões podes muito bem fazer uma query à BD apenas uma vez, depois guardas a lista de IPs banidos numa variável de sessão e pronto, não será preciso estar sempre a ir à BD...

Hum? Assim se forem actualizadas, não sabes. Chega a uma altura em que tens que actualizar a lista de IPs e verificar se o cliente se encontra em algum deles. E depois se a lista de IPs for enorme, imagina uma sessão por utilizador com uma lista de IPs
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nazgulled, para sessões, o cliente tem de manter o cookie. Ou seja, facilmente te obrigam a ir à bd.

Anyway, em relação ao ser demasiado estático Battousai, um cronjob a ir à db buscar os bans e actualizar o .htaccess não é propriamente estático...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nazgulled, para sessões, o cliente tem de manter o cookie. Ou seja, facilmente te obrigam a ir à bd.

Anyway, em relação ao ser demasiado estático Battousai, um cronjob a ir à db buscar os bans e actualizar o .htaccess não é propriamente estático...

Hum... Isso tem defeitos de fabrico.

Para já, o cronjob tinha que trabalhar aos segundos para que os bans fossem extintos na altura exacta.

Depois limpar e encher um ficheiro de x em x segundos, é só mais carga para o servidor.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O cronjob não seria executado segundo a segundo mas sim de 30 em 30 minutos. Além disso, só precisavas de ver quais os bans que acabaram de ser eliminados, e, caso existisse algum, fazer um dump para o htaccess dos bans que continuam.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

De 30 em 30 minutos limitavas o ban a horas certas e meias horas (pronto de meia em meia hora).

Depois no script ias ver quais os que já passavam da data e eliminava-os, depois enchias o .htaccess com os que ainda subsistiam e com os novos.

Depois quando adicionasses um novo ban, executavas este processo também.

Eu continuo a não achar este processo lá muito viável, porque os bans são levantados e actualizados de 30 em 30 minutos.

Ou então estou a apanhar mal alguma coisa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não é viável porquê? Banir, ele actualizava ao banir o pessoal. Desbanir, ele desbania de 30 em 30 minutos/quando se mexesse nos bans.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Certo, agora imagina o seguinte:

O cron actualiza de 30 em 30 minutos. Vamos imaginar que isto calha às 14:00 e 14:30 e por aí adiante.

Agora imagina que tu tens um ban de 45 minutos para um utilizador e marcas-te esse ban às 14, ou seja o ban acaba às 14:45.

O cron vai actualizar às 14:30 e a próxima actualização vai ser às 15. No primeiro, não elimina o ban, porque ainda não passaram 45 minutos, na actualização das 15 o ban já passou em 15 minutos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Solução: Predefinir tempos de bans e fazer cronjobs para esses periodos. OU, fazer o cronjob remover os bans que já expiraram E os que vão expirar nos próximos minutos (excepto se tiver marcado como necessário ir até ao fim, ou seja, só aparecia na próxima actualização.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Lol, pois, bem me parecia que faltava aí qualquer coisa...

Mas para estar a complicar tudo com essa solução, não achas mais simples simplesmente consultar a BD e pronto?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É mais simples, mas tem pior performance.

Anyway, agora lembrei-me de outra hipótese: um cronjob a correr de 10 em 10 minutos a gerar um .so que fosse módulo do Apache que faria o controlo de se está banido ou não. :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pior perfomance? Então multiplos crons e consultar e modificar ficheiros é melhor que consultar a BD quando um utilizador entra numa determinada área? Acho que não.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Múltiplos crons? Vais ter apenas um cronjob a gerar um .htaccess de x em x tempo, isso não tem muito menos custos na performance do que ires à bd sempre que o cliente pede o file?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Predefinir tempos de bans e fazer cronjobs para esses periodos.

Aí estás a dizer que são vários crons, ou não?

E repara que o cliente quando vai ao ficheiro, só vai uma vez (lol eu pelo menos só vou uma vez se estiver banido e espero) e não várias vezes.

E não compares o acesso a uma BD ao acesso "manual" a ficheiros. Optimização ainda serve para alguma coisa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora