(Solucionado) Agregar seguridad a Guestbook

Iniciado por 2Fac3R, 25 Enero 2012, 21:59 PM

0 Miembros y 1 Visitante están viendo este tema.

2Fac3R

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 (php) [Seleccionar]
<?php
echo "<title> Guestbook FOR TEST</title>";
function 
filtro1($datos){
$datos htmlentities($datos);
return $datos;
}
function 
filtrom($mensaje){
$mensaje strip_tags($mensaje,"<u><a><i><img><b><s>");
return $mensaje;
}
require_once("conexion.php");
$con $select;
$queryd mysql_query("SELECT * FROM guestbook") or die (mysql_error()); 
if(mysql_num_rows($queryd) !=0){
while($data mysql_fetch_array($queryd)){
echo '
<table border="0" cellpadding="3" cellspacing="3">
<td> Usuario: <b>'
.filtro1($data['Nick']).'</b> &nbsp;&nbsp;&nbsp;
Correo: <b>'
.filtro1($data['Email']).'</b> </td><br> 
<tr>
<td> <b>Comentario:</b> <br>'
.filtrom($data['Comentario']).' </tr>
</table> <hr>
'
;
}
}else{
echo "No hay comentarios aun \n";
}
if(isset($_POST['send'])&&($_POST['nombre'])&&($_POST['email'])&&($_POST['comentario'])){
   
    $query mysql_query("INSERT INTO guestbook(Nick,Email,Comentario)
   VALUES ('
$_POST[nombre]','$_POST[email]','$_POST[comentario]')") or die (mysql_error());
header("Location: guestbook.php");
}

?>

<center>
<h2> Agregar un comentario: </h2>
<form action="" method="POST">
 Nombre : <input type="text" maxlength="30" name="nombre"> <br>
 Email : <input type="text" maxlength="40" name="email"> <br>
     Comentario : <br>
     <textarea rows="8" cols="120" maxlength="10000" name="comentario"></textarea>
     <br>
     <font size="2">
     Etiquetas permitidas : &lt;a&gt; &lt;img&gt; &lt;b&gt; &lt;i&gt; &lt;u&gt; &lt;s&gt;
     </font> <br> <b>Maximo 10000 caracteres</b> <br>
<input type="submit" name="send" value="Comentar!">
<input type="reset" value="Borrar!">
</form> </center>


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
Escuela de Hackers & Programación. http://ihackndev.blogspot.com/

2Fac3R

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 (html4strict) [Seleccionar]

<img src=""></img>
<a href=""> </a>

Solo esos argumentos/parametros de esas etiquetas quiero que se permitan, alguien sabe como hacerlo?
Zalu2
Escuela de Hackers & Programación. http://ihackndev.blogspot.com/

dark_sargon

Podrías usar algo como BBCode en lugar de HTML directamente.

[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.actimediaonline.com
Diseño Web, animación y más.

http://www.ciudadoscura.com
Diseño Web, electrónica, programación, móviles y más.

2Fac3R

Cita de: dark_sargon en 26 Enero 2012, 17:22 PM
Podrías usar algo como BBCode en lugar de HTML directamente.

[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

Genial amigo, pensaba que el BBcode era instalado o algo externo. Me ha servido bastante el link :D
Gracias
Zalu2
Escuela de Hackers & Programación. http://ihackndev.blogspot.com/