Jump to content

Banir ip


keepz
 Share

Recommended Posts

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';

Link to comment
Share on other 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.

:q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp :quitplease :quitnow :leave ^X^C ^C ^D ^Z ^Q QUITDAMMIT

Link to comment
Share on other 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')

Link to comment
Share on other 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.

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Link to comment
Share on other 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?

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Link to comment
Share on other 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 )

"Quando eu for grande quero ser como o Celso"

Link to comment
Share on other 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
Link to comment
Share on other 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...

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Link to comment
Share on other 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.

Link to comment
Share on other 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.

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Link to comment
Share on other 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.

Link to comment
Share on other 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.

Link to comment
Share on other 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.

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.