Posts Tagged ‘Filtros’

mayo 17, 2011 0

Filtrando datos con filter_input

By in PHP

Algo que hay que tener en cuenta a la hora de desarrollar cualquier tipo de software, tanto web como de otro tipo, es que los datos que introduce el usuario no tienen porque ser los correctos, y en algunos casos pueden llegar a ser incluso maliciosos. Veamos un pequeño ejemplo:

Supongamos que tenemos el siguiente formulario:

formulario.php

<html>
<head>
  <title>Formulario</title>
</head>
<body>
  <form method="post" action="mensaje.php">
   <label for="mensaje">Mensaje:</label>
   <input type="text" name="mensaje" id="mensaje"/>
   <input type="submit" value="Enviar mensaje"/>
  </form>
</body>
</html>

Al pulsar el botón de enviar este nos lleva al siguiente script:

mensaje.php

<?php
  $mensaje = $_POST['mensaje'];
?>
<html>
<head>
  <title>Ver mensaje</title>
</head>
<body>
<p>El mensaje es:</p>
<p><?php echo $mensaje;?></p>
</body>
</html>

Si no tenemos cuidado puede ocurrir que un atacante malintencionado insertara como mensaje algo como:

<script src="script-dañino.js"></script>

Con lo que el código de ese script-dañino.js se ejecutaría, lo que podría hacer que cambiara el contenido de la página, que instalará algún tipo de malware, etc.

Podemos evitar esto con una función, que está presente desde PHP 5.2.0, que nos permite filtrar los datos que recibe el servidor por parte del navegador, la función filter_input. Veamos como quedaría el archivo mensaje.php una vez corregido:

mensaje.php

<?php
  $mensaje = filter_input(INPUT_POST, 'mensaje', FILTER_SANITIZE_SPECIAL_CHARS);
?>
<html>
<head>
  <title>Ver mensaje</title>
</head>
<body>
<p>El mensaje es:</p>
<p><?php echo $mensaje;?></p>
</body>
</html>

Y de esta sencilla forma hemos conseguido filtrar la variable mensaje. Este método no nos serviría si esperamos que la entrada venga en formato HTML, por ejemplo, pero si nos puede venir bien para otros tipos de datos.

Para ver una descripción completa de esta función es recomendable ver su documentación.

Comparte esta entrada:
Delicious Digg Google Technorati Menéame Fresqui Reddit Facebook Twitter Yahoo! Buzz MySpace Email BarraPunto

Tags: , ,