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){
$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>
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
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:
<img src=""></img>
<a href=""> </a>
Solo esos argumentos/parametros de esas etiquetas quiero que se permitan, alguien sabe como hacerlo?
Zalu2
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.desarrolloweb.com/articulos/2438.php)
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 (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