jul
10
2009

Defender tu web de posibles inyecciones Mysql

protegete de inyecciones a tu base de datos

Cuando programamos en php y hacemos paginas a la ligera, habeses cometemos el error de no ponerles seguridad y con simples inyecciones Mysql te dañan tu web usuario “buena onda” jaja :(

En pura mezcla de codigos de Internet y un poco de mi cosecha algo sencillo hice este para que les ayudara a evitar ese tipo de daños.

El archivo lo puedesponer en cada pagina de tu web con un

El codigo utiliza 2 tablas en mysql:
- Una es la lista negra
- Es la lista temporal

Este codigo consiste en que cuando el usuario intenta hacer una inyeccion mysql se detecta verifica si re encuentra su ip en la tabla temporal si esta mas de tres veces guardada su ip(Esto queire decir qeu ya hiso mas de tres intentos para tratar de fregar tu web) entonces lo banea osea lo manda a la lista negra y desde ese momento no podrá haceder a tu web.

Es muy Util espero que les agrade!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
<?php
// Conexion a la base de datos
$server="";
$usuario="";
$pass="";
$db="";
$link=mysql_connect($server,$usuario,$pass)or die (exit(mysql_error()));
mysql_select_db($db);
/////////////////////////////////////////
 
//Detectando ip de usuario
$ips=$_SERVER['REMOTE_ADDR'];
//Correo que se va a reportar el tipo de inyección
$report_to = "contacto@zoneartcss.com";
//Archivo log que se crea en tu servidor de todas las inyecciones
$_log_file="reportes_hack";
 
//hacemos una consulta a nuestra tabla de lista negra para verificar si la ip ya esta en dicha lista
$query = "SELECT * FROM 354_ip_black_list WHERE ip='".$ips."'";
$result = mysql_query($query, $link);
 
// si hay resultados entonces te bloquea y ya no puede el usuario acceder a tu web con esa ip
if(mysql_num_rows($result)) {
  while($row = mysql_fetch_row($result))
  {
		print '<body onLoad="history.go(+1)">';
		print "<script>alert('NO tienes Permitido el acceso a este portal.');</script>";
		die ("Baneado");
  }
}else{
 
//Funcion para detectar el intento de inyeccion MysQl
function smeprotect($a)
{
    global $report_to ,$_log_file;
	//En esta array agragamos todas las sentencias de mysql que no esten permitidas que el usuario escriba en la barra de direcciones de tu web
    $bad_str = array("content-type:","charset=","mime-version:","multipart/mixed","bcc:","insert", "select", "update", "delete", "distinct", "having", "truncate", "replace","handler", "like", "procedure", "limit", "order by", "group by","table");
    $suspect_found = false;
	//Se hace la busqueda de la palabras en el post de la direccion mandada
    foreach($bad_str as $suspect)
      {
    if(eregi($suspect, strtolower($a)))
	  {
	 //Detecta qeu tipo de usuario es el que esta haciendo la inyeccion Mysql
    $ip = (empty($_SERVER['REMOTE_ADDR'])) ? 'empty' : $_SERVER['REMOTE_ADDR'];
    $rf = (empty($_SERVER['HTTP_REFERER'])) ? 'empty' : $_SERVER['HTTP_REFERER'];
    $ua = (empty($_SERVER['HTTP_USER_AGENT'])) ? 'empty' : $_SERVER['HTTP_USER_AGENT'];
    $ru = (empty($_SERVER['REQUEST_URI'])) ? 'empty' : $_SERVER['REQUEST_URI'];
    $rm = (empty($_SERVER['REQUEST_METHOD'])) ? 'empty' : $_SERVER['REQUEST_METHOD'];
 
	$suspect_found = true;
    $a = eregi_replace($suspect, " (>>><strong>".$suspect."</strong><<<) ", $a);
 
    if(!empty($report_to))
      {
	  //Aqui ya detectamos que el usuario si hiso una inyeccion Msql
		$link=mysql_connect($server,$usuario,$pass)or die (exit(mysql_error()));
		mysql_select_db($db);
	//Hacemos una consulta  a otra tabla llamada  354_ip_list_temporal que dicha tabla es la temporal si el usuario ya trato de hacer la inyeccion mas de 3 veces entonces lo mandara a la lista negra y ya no tendra haceso al portal
	  $query3 = "SELECT * FROM 354_ip_list_temporal WHERE ip='".$ip."'";
	  $result1 = mysql_query($query3, $link);
 
 
	  $fecha=date('Y-n-j');
	  // mayos a 3 veces
	  if(mysql_num_rows($result1)>2){  
 
		  $queryx = "INSERT INTO 354_ip_black_list VALUES('".$ip."', '".$fecha."')";
		  mysql_query($queryx);
		  print "Lo sentimos pero eres una mala persona :(</b>";
		  print "<script>alert('Agregado a la Lista Negra');</script>";
		  exit;
 
 
	  }else{
	  // Si no esta mas de 3 veces entonces agraga un nuevo registro a la tabla temporal de si ip y lo renvia a la pagina principal
	  	$queryx2 = "INSERT INTO 354_ip_list_temporal VALUES('".$ip."', '".$fecha."')";
		mysql_query($queryx2);
		die ("<script>window.location = 'http://www.zoneartcss.com'</script>");
		exit;
	  }
 
	// te envia una notificación de todo lo sucedido a tu correo
    @mail($report_to,"[ABUSE] NOTIFICATION @ " .$_SERVER['HTTP_HOST'] . " by " . $ip,"possible abuse @ " .$_SERVER['HTTP_HOST'] . " by " . $ip ." (" . date('d/m/Y H:i:s') . ")\n\n" ."IP/HOST : " . $ip . "\n\n" ."USER AGENT : " . $ua . "\n\n" ."REFERER : " . $rf . "\n\n" ."REQUEST URI : " . $ru . "\n\n" ."REQUEST METHOD : " . $rm . "\n\n" ."SUSPECT String: " . $a . "\n\n\n\n--","From:".$report_to."\nMessage-ID: <".date("YmdHis")."@".$_SERVER['SERVER_NAME'].">\nMime-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 7bit");
      } 
//Se crea el archivo de acceso y se escribe los datos sucedidos
    if(!empty($_log_file))
      {	
    if (is_writable($_log_file))
	  {
    $fp = fopen("$_log_file","a");
	$string = "".date('d/m/Y H:i:s')."|$ip|$rf|$ua|$ru|$rm|$a\n";
 
	fwrite($fp, $string); 
    fclose($fp);
	  }
      }	
    die("");
 
      }
      }
 
}
 
foreach ($_GET as $value)
{
    smeprotect($value);
}
 
foreach ($_POST as $value)
{
    smeprotect($value);  
}
}
 
///Fin del codigo
?>

Deja tu Comentario o Duda!!!

Pero antes te dejo otro tipo de Inyección.. Es la Inyeccion Terrorifica (6)



Related Posts

About the Author: Miguel Angel Ortega Acosta

2 Comments + Add Comment

  • Online net directory. Combine your purlieus to our directory object of free. Do not remove the entries. do gazu!

  • Felicitaciones: el código…. de maravilla; cuando se comparte conocimiento, mente, cuerpo y espíritu, generan la sinergia necesaria para permanecer en la mente de aquellos a quienes hemos servido desprevenidamente. Gracias mil!

Leave a comment

Patrocinador

Siguenos

Suscribete

Escribe tu correo:

Recibirás un correo con todos los articulos escritos en ZoneArtCss durante el día.

Correo @zoneartcss.com

Obtén una cuenta de @zoneartcss.com gratuita