Bloqueando visitantes pelo IP com MySQL e PHP
Banir um visitante de vez, baseando-se no IP dele é, sem dúvida, uma das formas mais simples e eficazes (a curto prazo) de evitar que alguém fique brincando com o seu sistema… Claro que o visitante pode mudar o seu IP sem muito esforço, mas em 99% dos casos isso exigiria pelo menos 1 ou 2 minutos dele… E dependendo da rede e dos conhecimentos dele isso pode não ser possível…
Para salvar a lista de IPs banidos usaremos uma tabela no MySQL que pode ser criada com o seguinte código:
1.CREATE TABLE `banidos` ( 2. `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , 3. `ip` VARCHAR( 15 ) NOT NULL , 4. `inicio` DATETIME NOT NULL , 5. `fim` DATETIME NOT NULL , 6. INDEX ( `ip` ) 7.) ENGINE = MYISAMJá a parte em PHP do sistema vai funcionar da seguinte maneira… Quando o visitante tentar acessar o seu site é incluído um arquivo que busca no MySQL se esse IP está na lista de banidos, caso esteja o visitante é redirecionado para outro site/endereço.
Não vou falar como fazer uma conexão ao MySQL porque isso já foi dito N vezes aqui no blog e ocupa um espaço desnecessário na aula. ![]()
Antes de verificar se um visitante está “banido” precisamos limpar da tabela os registros que já expiraram… Esse passo é opcional pois quando formos verificar se um usuário está banido vamos verificar também se o período é valido… Vamos lá:
01.<?php 02. 03.// Inclui o arquivo que faz a conexão com o banco de dados 04.require_once('mysql.php'); 05. 06.// IP do visitante para uso futuro 07.$ip_visitante = $_SERVER['REMOTE_ADDR']; 08. 09.// Deleta os registros que já expiraram, esse passo é opcional! 10.$sql = "DELETE FROM `banidos` WHERE ( `fim` <= NOW() )"; 11.mysql_query($sql); 12. 13.?>Agora nós vamos verificar se o IP do visitante consta na lista dos que ainda estão banidos:
01.<?php 02. 03.// Inclui o arquivo que faz a conexão com o banco de dados 04.require_once('mysql.php'); 05. 06.// IP do visitante para uso futuro 07.$ip_visitante = $_SERVER['REMOTE_ADDR']; 08. 09.// Deleta os registros que já expiraram, esse passo é opcional! 10.$sql = "DELETE FROM `banidos` WHERE ( `fim` <= NOW() )"; 11.mysql_query($sql); 12. 13.// Verifica se o visitante está banido 14.$sql = "SELECT * FROM `banidos` WHERE ( `ip` = '". $ip_visitante ."' ) AND ( NOW() BETWEEN `inicio` AND `fim` )"; 15.$query = mysql_query($sql); 16.if (mysql_num_rows($query) > 0) { 17. // Pelo menos um resultado foi encontrado, o usuário está banido 18.} 19. 20.?>Agora é só redirecionar o visitante para outra página/endereço:
13.// Verifica se o visitante está banido 14.$sql = "SELECT * FROM `banidos` WHERE ( `ip` = '". $ip_visitante ."' ) AND ( NOW() BETWEEN `inicio` AND `fim` )"; 15.$query = mysql_query($sql); 16.if (mysql_num_rows($query) > 0) { 17. // Redireciona o visitante 18. header("Location: http://www.pudim.com.br/"); 19. exit; 20.}–
Agora nós vamos criar uma funçãozinha que você vai usar para banir o visitante durante X minutos… Vamos lá:
01.function banirVisitante($minutos, $ip = null) { 02. // Define o IP que será banido 03. $ip = (is_null($ip)) ? $_SERVER['REMOTE_ADDR'] : $ip; 04. 05. // Verifica se o usuário já está banido 06. $sql = "SELECT * FROM `banidos` WHERE ( `ip` = '". $ip ."' ) AND ( NOW() BETWEEN `inicio` AND `fim` )"; 07. $query = mysql_query($sql); 08. if (mysql_num_rows($query) > 0) { 09. // Cria uma consulta que atualizará o registro do visitante 10. $sql = "UPDATE `banidos` SET `fim` = DATE_ADD(NOW(), INTERVAL ".$minutos." MINUTE) WHERE ( `ip` = '". $ip ."' ) AND ( NOW() BETWEEN `inicio` AND `fim` )"; 11. } else { 12. // Cria uma consulta que insere o registro na tabela 13. $sql = "INSERT INTO `banidos` VALUES ( NULL, '". $ip ."', NOW(), DATE_ADD(NOW(), INTERVAL ".$minutos." MINUTE) )"; 14. } 15. // Executa a consulta criada dentro do IF/ELSE 16. mysql_query($sql); 17. 18. // Redireciona o visitante 19. if ($_SERVER['REMOTE_ADDR'] == $ip) { 20. header("Location: http://www.pudim.com.br/"); 21. exit; 22. } 23.}Aí quando você quiser banir um visitante, seja qual for o motivo, é só usar a função criada:
1.// Banir visitante por 10 minutos 2.banirVisitante(10); 3. 4.// Banir um IP específico por 3 dias 5.banirVisitante(60 * 24 * 3, '114.154.95.24');–Fonte:thiagobelem.net
NOTICIAS RELACIONADAS:
- Usar MySQL com PHP
- Relacionamento de Tabelas no MySQL
- Sistema de votação online em PHP e MySQL
- Como criar um Sistema de Login com Níveis de Permissão
- Sistema de votação online em PHP e MySQL
Filed under: MYSQL