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 = MYISAM

Já 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:

  1. Usar MySQL com PHP
  2. Relacionamento de Tabelas no MySQL
  3. Sistema de votação online em PHP e MySQL
  4. Como criar um Sistema de Login com Níveis de Permissão
  5. Sistema de votação online em PHP e MySQL

Deixe seu comentário, compartilhe sua opinião

Spam Protection by WP-SpamFree

Parceiros:|BRA Concursos |Mural da Vila |Noticias de Urucui |Anita Mulher