Filter un misterio de PHP.
Todas las aplicaciones (Web, Escritorio, Consola) dependen que datos externos para crear una salida o iniciar un proceso, estos datos pueden venir desde un usuario u otra aplicación (WebService, formulario, etc…) por eso la premisa #1 de todo desarrollador debe:
Filtrar todos los datos externos
El filtrado de datos es una de las piedras angulares en cualquier aplicación en el tema de seguridad, independientemente del lenguaje donde se trabaje. PHP proporciona una amplia gama de herramientas y funciones para filtrar o validar los datos, pero a diferencia de otros lenguajes, no tiene funciones estándar para filtrar los datos (como cgi de perl).
La extensión Filter llena este vacío y viene a suplir muchas expresiones regulares que son extremadamente lentas para validar formatos y datos de entradas, estas son muchas de las bondades de PHP que muchos desarrolladores no suelen utilizar y que vienen a ser parte de las buenas practicas de desarrollo sobre este lenguaje.
Este componente cuenta con constantes que representan los filtros a ser aplicados y ademas estos se pueden aplicar sobre array’s conocidos (POST, GET, COOKIE, etc) de manera que se vuelve flexible, para este tipo de validaciones y/o sanamiento de los datos de entrada, veamos unos ejemplos.
imaginemos que enviamos por $_GET un dato que lo hemos llamado ‘mode’
if($_GET['mode']){ if(!is_numeric($_GET['mode'])){ echo "'mode' no es un entero"; } else { echo "'mode' es un entero"; return (int)$_GET['mode']; } }
Ahora utilizando el Filter filter_input
$mode = filter_input(INPUT_GET, 'mode', FILTER_VALIDATE_INT); if(!$mode){ echo "'mode' no es un entero"; } else { echo "mode es: $mode"; return $mode; }
Ya podemos apreciar que nuestro código se limpia y si le hacemos un benchmark seguramente también será mas rápido ;-)
Consideraciones sobre los filtros
- Santizing(limpieza) filtros, Permitir o denegar los caracteres de una cadena, siempre retorna una cadena
- Filtros Lógicos, Conoce los formatos devuelve el tipo esperado de éxito.
Un formulario, aplicando filtros lógicos.
<form action="example.php" method="post"> Ingrese su Edad: <input name="age" size="2" /> <input name="submit" type="submit" value="Ir" /> </form>
Y el script que procesa esta información seria:
if (filter_has_var(INPUT_POST, 'submit')) { echo 'Se envió el form'; } $age = filter_input(INPUT_POST, 'age', FILTER_VALIDATE_INT); if (is_null($age)) { echo "La 'edad' es un campo requerido!"; } elseif ($age === FALSE) { echo 'Ingrese una edad valida'; } else { echo 'Bienvenido.'; }
Bien como vemos solo validamos que la edad sea un numero entero, pero existen algunos filtros que soportan options para que las validaciones sean mas precisas. Ahora la edad debe pasar la condición que debe estar entre un rango entre 7 y 77. veamos la utilización con el código anterior.
if (filter_has_var(INPUT_POST, 'submit')) { echo 'Se envió el form'; } $age = filter_input(INPUT_POST, 'age', FILTER_VALIDATE_INT, array('options'=> array('min_range'=>7, 'max_range'=>77)); if (is_null($age)) { echo "La 'edad' es un campo requerido!"; } elseif ($age === FALSE) { echo 'Ingrese una edad valida'; } else { echo 'Bienvenido.'; }
Un formulario, aplicando filtros Santizing.
<form action="example01.php" method="post"> Ingrese su Nombre: <input name="name" size="50" /> <input name="submit" type="submit" value="Ir" /> </form>
Y script que lo procesa…
if (filter_has_var(INPUT_POST, 'submit')) { echo 'Se envió el form'; } $name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW); if (is_null($name)) { echo "El 'nombre' es un campo requerido!"; } else { echo "Bienvenido, $name"; }
En PHP 5.x esta extensión viene por defecto.
Por último dejo un post de PHPPro donde servirá de guía para muchos, de manera que escalemos nuestras formas de validar datos.
1 Comment
Leave a comment
Buscas algo?
Paginas
Blog's
Blogroll
Temiga's
Etiquetas
Comentarios Recientes…
- levep en La desidia de un profesor + Parte II
- zac castillo en 10 avances cientificos del 2007.
- zac castillo en 10 avances cientificos del 2007.
- julie en 10 avances cientificos del 2007.
- Richard en Conexión Movilnet + Modem CDU-680
Historico
- julio 2011
- julio 2010
- junio 2010
- mayo 2010
- abril 2010
- marzo 2010
- febrero 2010
- enero 2010
- diciembre 2009
- octubre 2009
- agosto 2009
- junio 2009
- mayo 2009
- marzo 2009
- febrero 2009
- enero 2009
- diciembre 2008
- noviembre 2008
- octubre 2008
- septiembre 2008
- agosto 2008
- julio 2008
- junio 2008
- mayo 2008
- abril 2008
- marzo 2008
- febrero 2008
- enero 2008
- diciembre 2007
- noviembre 2007
- septiembre 2007
- agosto 2007
- julio 2007
- junio 2007
Categorías
- comunidad (3)
- Configuracion (7)
- Debian (12)
- Discusion (3)
- Eventos (5)
- Flame (1)
- Fotografías (1)
- GNU/linux (2)
- Hacking (5)
- Interes (11)
- KumbiaPHP (13)
- Linux (12)
- NoSQL (1)
- Noticias (22)
- Pentaho (1)
- Personal (2)
- PHP5 (8)
- Planeta Linux (38)
- Podcast (2)
- cl-radio (1)
- Postgresl (1)
- Programación (16)
- Script (1)
- Software Libre (14)
- Universidad (4)
- Varios (3)
- web (13)





![PS Vita cautiva [baba]](http://farm8.staticflickr.com/7056/6967411085_0d4fec8c14_t.jpg)


[...] los comentarios, al valor ‘q’ que recibimos lo debemos pasar por un filter_var. Revisen su articulo para mas informacion.Deja de pelear con tu hosting! Mira los planes de [...]