Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: 2Fac3R en 25 Enero 2012, 21:59 pm



Título: (Solucionado) Agregar seguridad a Guestbook
Publicado por: 2Fac3R en 25 Enero 2012, 21:59 pm
Hola amigos, resulta que ando en practicas con PHP + MySQL (y un poco de todo) y desde hace tiempo que me ando haciendo un guestbook. Resulta que segun yo, ya lo tenia "seguro" (sabia que no mucho, pero por lo menos sec. basica si) y aun amigo, que ha estado mas adentrado en el mundo del XSS, me ha encontrado bugs muy facilmente, y la verdad que no se como fixearlos.

Este es mi code:

Código
  1. <?php
  2. echo "<title> Guestbook FOR TEST</title>";
  3. function filtro1($datos){
  4. $datos = htmlentities($datos);
  5. return $datos;
  6. }
  7. function filtrom($mensaje){
  8. $mensaje = strip_tags($mensaje,"<u><a><i><img><b><s>");
  9. return $mensaje;
  10. }
  11. require_once("conexion.php");
  12. $con & $select;
  13. $queryd = mysql_query("SELECT * FROM guestbook") or die (mysql_error());
  14. if(mysql_num_rows($queryd) !=0){
  15. while($data = mysql_fetch_array($queryd)){
  16. echo '
  17. <table border="0" cellpadding="3" cellspacing="3">
  18. <td> Usuario: <b>'.filtro1($data['Nick']).'</b> &nbsp;&nbsp;&nbsp;
  19. Correo: <b>'.filtro1($data['Email']).'</b> </td><br>
  20. <tr>
  21. <td> <b>Comentario:</b> <br>'.filtrom($data['Comentario']).' </tr>
  22. </table> <hr>
  23. ';
  24. }
  25. }else{
  26. echo "No hay comentarios aun \n";
  27. }
  28. if(isset($_POST['send'])&&($_POST['nombre'])&&($_POST['email'])&&($_POST['comentario'])){
  29.      $query = mysql_query("INSERT INTO guestbook(Nick,Email,Comentario)
  30. VALUES ('$_POST[nombre]','$_POST[email]','$_POST[comentario]')") or die (mysql_error());
  31. header("Location: guestbook.php");
  32. }
  33.  
  34. ?>
  35. <center>
  36. <h2> Agregar un comentario: </h2>
  37. <form action="" method="POST">
  38.  Nombre : <input type="text" maxlength="30" name="nombre"> <br>
  39.  Email : <input type="text" maxlength="40" name="email"> <br>
  40.      Comentario : <br>
  41.      <textarea rows="8" cols="120" maxlength="10000" name="comentario"></textarea>
  42.      <br>
  43.      <font size="2">
  44.      Etiquetas permitidas : &lt;a&gt; &lt;img&gt; &lt;b&gt; &lt;i&gt; &lt;u&gt; &lt;s&gt;
  45.      </font> <br> <b>Maximo 10000 caracteres</b> <br>
  46. <input type="submit" name="send" value="Comentar!">
  47. <input type="reset" value="Borrar!">
  48. </form> </center>
  49.  

Me ha sacado bugs, ya que al permitir la etiqueta <a> y <img> con un poco de javascript y CSS me ha logrado "XSSear" el guestbook.

Lo que quiero hacer basicamente, es seguir permitiendo ciertas etiquetas, pero poder filtrar todo tipo de ataque.

Alguna idea?
Zalu2


Título: Re: Agregar seguridad a Guestbook
Publicado por: 2Fac3R en 26 Enero 2012, 17:04 pm
Vale como nadie ha respondido, supongo que no fui claro.

Lo que quiero hacer especificamente es que se filtre todo lo que entre pero se permita en etiquetas <a> y <img> asi:
Código
  1. <img src=""></img>
  2. <a href=""> </a>
  3.  
Solo esos argumentos/parametros de esas etiquetas quiero que se permitan, alguien sabe como hacerlo?
Zalu2


Título: Re: Agregar seguridad a Guestbook
Publicado por: dark_sargon en 26 Enero 2012, 17:22 pm
Podrías usar algo como BBCode en lugar de HTML directamente.
Código:
[img]src de la imagen[/img]
[url]href del vínculo[/url]

Pienso que es más facil.

http://www.desarrolloweb.com/articulos/2438.php (http://www.desarrolloweb.com/articulos/2438.php)


Título: Re: Agregar seguridad a Guestbook
Publicado por: 2Fac3R en 26 Enero 2012, 23:11 pm
Podrías usar algo como BBCode en lugar de HTML directamente.
Código:
[img]src de la imagen[/img]
[url]href del vínculo[/url]

Pienso que es más facil.

http://www.desarrolloweb.com/articulos/2438.php (http://www.desarrolloweb.com/articulos/2438.php)

Genial amigo, pensaba que el BBcode era instalado o algo externo. Me ha servido bastante el link :D
Gracias
Zalu2