Título: Sistema de boton ME GUSTA en php y mysql
Publicado por: catriel10 en 13 Abril 2013, 21:12 pm
Buenas tardes gente, les traigo un sistema de ME GUSTA para aquellos que quieran ponerlo en su pagina.
CREAMOS LA BASE DE DATOS CREATE TABLE `post` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `nombre` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL, `megusta` INT(11) DEFAULT '0', `ips` text COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4 ;[/b][/LEFT]
ESTE ES EL INDEX.PHP [left]<?php $dbhost = "SERVIDOR"; // Servidor $dbuser = "USUARIO"; // Nombre de usuario $dbpass = "CONTRASENA"; // Contraseña $dbname = "NOMBRE_BASE_DE_DATOS"; // Nombre de la base de datos # Creamos conexion a la base de datos # Imprimimos una prueba para dar como ejemplo $sql = "SELECT * FROM post"; ?> <table width="800" border="0" align="center"> <tr> <td width="5%" align="center">ID</td> <td width="63%" align="center">NOMBRE DEL POST</td> <td width="32%" align="center">ME GUSTA</td> </tr> <?php {?> <tr> <td width="5%" align="center"><?=$row['id']?></td> <td width="63%" align="center"><?=$row['nombre']?></td> <td width="32%" align="center">[<a href="megusta.php?voto=positivo&id=<?=$row['id']?>">Me gusta</a>] <?=$row['megusta']?> [<a href="megusta.php?voto=negativo&id=<?=$row['id']?>">No me gusta</a>]</td> </tr> <?php } ?> </table>
POR ULTIMO DONDE SE REALIZA LA FUNCION megusta.php <?php $dbhost = "SERVIDOR"; // Servidor $dbuser = "USUARIO"; // Nombre de usuario $dbpass = "CONTRASEÑA"; // Contraseña $dbname = "NOMBRE_BASE_DE_DATOS"; // Nombre de la base de datos # Creamos conexion a la base de datos # Saber si el voto es negativo o positivo # Tomamos el id de nuestro post y vemos todas las ip que pusieron megusta $id = (int) $_GET['id']; $query = mysql_query("SELECT id,ips FROM post WHERE id='".$id."'",$link); $ip = $row['ips']; # Obtenemos la ip de nuestro visitante { } # Me gusta o No me gusta switch($voto) { case "positivo"; if($query) { if(!$arr) { mysql_query("UPDATE post SET megusta=megusta+1, ips=CONCAT(post.ips,'".$ipp.",') WHERE id='".$id."'",$link); } } break; case "negativo"; if($query) { if(!$arr) { mysql_query("UPDATE post SET megusta=megusta-1, ips=CONCAT(post.ips,'".$ipp.",') WHERE id='".$id."'",$link); } } break; } ?>
Título: Re: Sistema de boton ME GUSTA en php y mysql
Publicado por: дٳŦ٭ en 16 Abril 2013, 18:28 pm
Muchas gracias por el aporte. :)
Título: Re: Sistema de boton ME GUSTA en php y mysql
Publicado por: #!drvy en 16 Abril 2013, 19:34 pm
Mencionar que el sistema es un poco inseguro en el modulo megusta.php, lineas 20-26, . La razón: En la linea 21, compruebas si la variable $HTTP_X_FORWARDED_FOR esta vacia. Esto en una parte da a pensar que el sistema utiliza "Register Globals" que se ha demostrado que si no se usa correctamente puede ser un agujero. Si dicha variable no llega a estar vacía (si se utiliza "Register Globals" es muy fácil de declarar), el sistema utilizara: $ipp = getenv(HTTP_X_FORWARDED_FOR );
Esto tiene 2 errores. 1 - La menera correcta de declararlo seria getenv( 'HTTP_X_FORWARDED_FOR ');. Con comillas (simples o dobles) entre el nombre. En caso de no hacerlo, PHP tira un error de Assuming. 2 - No se filtra. La cabecera X-Forwarded-For, se enviada por el cliente Por tanto, un usuario mal intencionado, puede simular la cabecera para introducir lo que el quiera. Desde IP's no existentes (999.999.999.999) hasta una inyección SQL. Yo te recomiendo usar solo REMOTE_ADDR. Esta bien detectar el proxy pero no creo que merezca la pena perder seguridad por saber la IP real del visitante. Un simple exploit- suponiendo que register globals esta on: <?php // Url a atacar. $url = 'http://localhost/megusta.php'; $id = 1; $voto = 'positivo'; $veces = 100; /* ---------------------- */ $url .= '?id='.$id.'&voto='.$voto.'&HTTP_X_FORWARDED_FOR=a'; for ($i=0; $i<=$veces; $i++) { // cambio de IP por cada request. // Ejecutar // Dormir } echo 'Terminado'; ?>
Saludos
Título: Re: Sistema de boton ME GUSTA en php y mysql
Publicado por: catriel10 en 16 Abril 2013, 20:14 pm
Gracias drvy | BSM, pero la verdad es que no tengo mucha idea de php y mysql, no se mucho de codigos y seguridad. Disculpa pero ahi le agrego las comillas como vos dijiste :). дٳŦ٭ gracias a vos por ver el post, saludos
|