
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 include ("anti_hack.php"); ?>
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)
Compartir






