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:
<?php
echo "<title> Guestbook FOR TEST</title>";
function filtro1($datos){
return $datos;
}
function filtrom($mensaje){
$mensaje = strip_tags($mensaje,"<u><a><i><img><b><s>"); return $mensaje;
}
require_once("conexion.php");
$con & $select;
echo '
<table border="0" cellpadding="3" cellspacing="3">
<td> Usuario: <b>'.filtro1($data['Nick']).'</b>
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 : <a> <img> <b> <i> <u> <s>
</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