Banear Ips con php

Por el 15 de febrero de 2007

en: Movil|Programacion

Con este pequeño tutorial podemos crear un script, este script incluye un pequeño panel de control para añadir y eliminar ips.

El primer paso será crear nuestra tabla que contendrá lo datos que utilizaremos para la correcta ejecución del script.

CREATE TABLE `banned` (
`id` int(11) NOT NULL auto_increment,
`ip` varchar(255) NOT NULL default ”,
`time` varchar(255) NOT NULL default ”,
`long` varchar(255) NOT NULL default ”,
`reason` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;


En este segundo paso crearemos un archivo de configuración con los parametros básicos del script.

<?php
// config
$config['host'] = "localhost"; // Servidor mysql
$config['user'] = "username"; // usuario mysql
$config['pass'] = "password"; // password mysql
$config['db'] = "database"; // base de datos

@mysql_connect("$config[host]","$config[user]","$config[pass]") or die("There was an error connecting to the database, MySql said:<br />".mysql_error()."");
@mysql_select_db("$config[db]") or die("Hubo un error en la conexion de base de datos"");
?>

Ahora que tenemos las variables los datos necesarios para interectuar con la base de datos, necesitamos hacer las funciones que almacenaremos en un archivo llamado func.ban.php:

<?php
// func.ban.php
// chequea si la ip esta baneada
function checkban($ip)
{
// consultas de la base de datos
$q = mysql_query("SELECT * FROM `banned` WHERE `ip` = ‘$ip’ LIMIT 1");
$get = mysql_num_rows($q);
if ($get == "1")
{
// denegar accesos
$r=mysql_fetch_array($q);
die("Tu has sido baneado del sitio hasta $r[legnth]. Si tu crees que esto ha sido provocado por un error por favor contacta con el admnistrador.");
}
}
// agrega una ip baneada
function addban($ip,$reason,$legnth)
{
// get current time
$time = time();
// insertamos en la base de datos
$insert = mysql_query("INSERT INTO `banned` (`ip`,`time`,`long`,`reason`) VALUES (‘$ip’, ‘$time’, ‘$legnth’, ‘$reason’)") or die("Error.<br />".mysql.error()."");
echo "La direccion ip $ip, ha sido agregada a la lista.";
}
// elimina un registro de la base de datos
function delban($id)
{
$delete = mysql_query("DELETE FROM `banned` WHERE `id` = ‘$id’ LIMIT 1") or die("Could not remove ban.<br />".mysql.error()."");
echo "La direccion ip ha sido eliminada de la lista.";
}
// muestra las direcciones baneadas
function listbans()
{
echo "<a href=’banadmin.php?x=add’>Agregar</a><p>";
// bucle para mostrar todas
$query = mysql_query("SELECT * FROM `banned` ORDER BY time DESC");
$num = mysql_num_rows($query);
if ($num)
{
while ($r=mysql_fetch_array($query))
{
echo "$r[ip] – $r[razon] – <a href=’banadmin.php?x=delete&id=$r[id]‘>Eliminar</a><br />";
}
}
}
?>

Ahora tenemos todas las funciones para nuestro panel de administración y unicamente tendremos que crear la estructura:

<?php
// banadmin.php
// incluir archivos
include "config.php";
include "func.ban.php";

switch ($_GET['x'])
{
default:
listbans();
break;
// si agregamos una direccion mostraremos el formulario
case "add":
// y en caso de que el formulario haya sido enviado crearemos el registro
if ($_POST['add'])
{
$ip = $_POST['ip'];
if (!$ip)
{
echo "Debes poner una Ip al menos";
}
addban($ip,$_POST[reason],$_POST[legnth]);
}
// otra manera de mostrar el formulario
else
{
echo "Agregar direccion baneada.<br />";
echo "<form method=’post’ action=’banadmin.php?x=add’>";
echo "Direccion IP<br /><input type=’text’ name=’ip’><br />";
echo "Razon<br /><input type=’text’ name=’reason’><br />";
echo "Duracion<br /><input type=’text’ name=’legnth’><br />";
echo "<input type=’submit’ name=’add’ value=’Agregar direccion’>";
}
break;
// eliminar una direccion
case "delete":
if ($_GET['id'])
{
delban($_GET['id']);
}
// show error
else
{
echo "No has seleccionado ninguna ip para eliminar";
}
break;
}
?>

Ahora agrega este pequeño trozo de código a todas aquellas páginas en las que quieres controlar a los usuario baneados:

<?
include "config.php";
include "func.ban.php";
checkban($_SERVER['REMOTE_ADDR']);
?>

Si experimentais algún tipo de error en la ejecución del script comprobad que no hay ningún fallo de tipo tipográfico.

Puedes ver más información sobre este script aquí

Enlaces Relacionados

Seccion Programación (TuFunción)
Tutorial básico de AJAX
Diferencia entre PHP ASP y otros lenguajes de programación
Fácil sistema de autentificación de usuarios (PHP)
Tendencia de los lenguajes de programación
Bases de datos y PHP
Consejos para escribir código Javascript
Perl está muriendo
8 lenguajes de programación que deberías aprender
Escuchando mp3 desde Gmail
5 increibles aplicaciones Javascript
Crear un favicon.ico para tu Web
Fácil sistema de autentificación (login, password) PHP
Llamadas gratis con VoipBuster
Datos de seguridad en contraseñas

Dejar un comentario