Desinfecte y valide datos con filtros PHP

La validación de datos es una parte integral del trabajo con formularios. Los datos enviados no válidos no solo pueden llevar a problemas de seguridad, sino que también pueden dañar su página web. Hoy, analizaremos cómo eliminar caracteres ilegales y validar datos mediante la función "filter_var".


Un ejemplo se puede ver a continuación. Un usuario ha ingresado el texto "No tengo uno" como página de inicio. Si estos datos se ingresaran en una base de datos y luego se recuperaran como un enlace, el enlace se rompería.

La mayoría de las personas tienden a pensar en la validación de datos como un proceso inmensamente tedioso en el que uno:

  • Compara los datos que desean validar con cada combinación posible que puedan pensar.
  • Intenta encontrar una expresión regular dorada que coincida con cada combinación posible.
  • Una combinación de los dos.

Hay problemas obvios con lo mencionado anteriormente:

  • Es absolutamente lento.
  • Hay una posibilidad muy alta de error.

Afortunadamente, a partir de la versión 5.2, PHP ha incluido una gran función llamada filter_var Eso quita el dolor de la validación de datos.

filter_var en acción

filter_var Lo hará, tanto, sanear como validar los datos. Cuál es la diferencia entre los dos?

  • La desinfección eliminará cualquier carácter ilegal de los datos..
  • La validación determinará si los datos están en la forma adecuada.

Nota: ¿Por qué sanear y no solo validar? Es posible que el usuario haya tecleado accidentalmente un carácter incorrecto o que se haya copiado y pegado incorrectamente. Al limpiar los datos, usted asume la responsabilidad de buscar el error del usuario.

Cómo utilizar filter_var

Utilizando filter_var Es increíblemente fácil. Es simplemente una función de PHP que toma dos datos:

  • La variable que quieres comprobar.
  • El tipo de cheque a utilizar.

Por ejemplo, el siguiente código eliminará todas las etiquetas HTML de una cadena:

$ string = "

Hola Mundo!

"; $ new_string = filter_var ($ string, FILTER_SANITIZE_STRING); // $ new_string ahora es" Hello, World! "

Aquí hay otro ejemplo - esta vez más difícil. El siguiente código asegurará que el valor de la variable sea una dirección IP válida:

$ ip = "127.0.0.1"; $ valid_ip = filter_var ($ ip, FILTER_VALIDATE_IP); // $ valid_ip es TRUE $ ip = "127.0.1.1.1.1"; $ valid_ip = filter_var ($ ip, FILTER_VALIDATE_IP); // $ valid_ip es FALSO

Así de simple es usar. filter_var. Para obtener una lista completa de todas las reglas con las que puede verificar, vea el final de este tutorial..

Ejemplo de desinfección

A continuación se muestra un ejemplo rápido de la entrada de desinfección de dos campos: un campo de correo electrónico y un campo de página de inicio. Este ejemplo eliminará cualquier carácter que no deba aparecer en ninguno de los tipos de datos.


"; if (isset ($ _ POST ['homepage')) echo filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); echo"

";?>
Dirección de correo electrónico:


Página de inicio:


Utilizando el FILTER_SANITIZE_EMAIL y FILTER_SANITIZE_URL constantes definidas por PHP, el trabajo de adivinar de saber qué personajes son ilegales se ha ido.

Ejemplo de validación

El hecho de que los datos estén limpios no garantiza que se formatee correctamente. En el ejemplo a continuación, los datos no tuvieron que ser limpiados, pero es obvio que la entrada del usuario no es un correo electrónico o URL..

Para garantizar que los datos estén correctamente formateados, es necesario validarlos..


"; else echo" $ email es NO una dirección de correo electrónico válida.

"; if (isset ($ _ POST ['homepage')) $ homepage = filter_var ($ _ POST ['homepage', FILTER_SANITIZE_URL); if (filter_var ($ homepage, FILTER_VALIDATE_URL)) echo" $ homepage es una URL válida.

"; else echo" $ homepage is NO una URL válida.

";?>
Dirección de correo electrónico:


Página de inicio:


Ahora que los datos han sido validados, puede estar seguro de que la información enviada es exactamente lo que está buscando.

Juntándolo todo: un formulario de envío por correo electrónico

Ahora que el saneamiento y la validación de los datos se han cubierto, pondremos esas habilidades en uso con un formulario de envío rápido por correo electrónico. Esto de ninguna manera será de calidad de producción, por ejemplo, ninguna forma debe requerir una página de inicio, pero funcionará perfectamente para este tutorial. El formulario tomará 4 piezas de información:

  • Nombre
  • Dirección de correo electrónico
  • Página de inicio
  • Mensaje

Lo desinfectaremos y validaremos contra los 4 datos y solo enviaremos el correo electrónico si todos son válidos. Si algo no es válido, o si algún campo está en blanco, el formulario se presentará al usuario junto con una lista de elementos para corregir. También devolveremos los datos desinfectados al usuario en caso de que no sepan que ciertos caracteres son ilegales.

Paso 1 - Creando el formulario

Para el primer paso, simplemente cree un elemento de formulario con 5 campos: el listado arriba y un botón de envío:

Nombre:


Dirección de correo electrónico:


Página de inicio:


Mensaje:

Paso 2 - Determine si el formulario fue enviado

Puede verificar si se envió un formulario al ver si el botón de envío estaba "configurado". Coloque el siguiente código sobre su formulario:

if (isset ($ _ POST ['Enviar'])) 

Paso 3 - Validar el nombre y el campo de mensaje

Como los campos de nombre y mensaje se limpiarán y validarán de la misma manera, los haremos juntos. Primero, verifique si alguno de los campos está en blanco haciendo lo siguiente:

if ($ _POST ['name'] == "") if ($ _POST ['message'] == "")

A continuación, desinféctelos con el FILTER_SANITIZE_STRING constante

$ _POST ['name'] = filter_var ($ _ POST ['name'], FILTER_SANITIZE_STRING); $ _POST ['message'] = filter_var ($ _ POST ['message'], FILTER_SANITIZE_STRING);

Finalmente, asegúrese de que los dos campos aún no estén en blanco. Esto es para asegurarse de que después de eliminar todos los caracteres ilegales, no se quede con un campo en blanco:

if ($ _POST ['name'] == "") if ($ _POST ['message'] == "")

No haremos ninguna validación en estos dos campos simplemente porque no hay una manera absoluta de validar contra un Nombre o mensaje arbitrario.

El código final se ve así:

if ($ _POST ['name']! = "") $ _POST ['name'] = filter_var ($ _ POST ['name'], FILTER_SANITIZE_STRING); if ($ _POST ['name'] == "") $ errors. = 'Por favor ingrese un nombre válido.

'; else else $ errors. = 'Por favor ingrese su nombre.
'; if ($ _POST ['message']! = "") $ _POST ['message'] = filter_var ($ _ POST ['message'], FILTER_SANITIZE_STRING); if ($ _POST ['message'] == "") $ errors. = 'Por favor ingrese un mensaje para enviar.
'; else else $ errors. = 'Por favor ingrese un mensaje para enviar.
';

Paso 4 - Validar el campo de correo electrónico

El campo de correo electrónico se saneará y validará tal como estaba anteriormente en el tutorial.

Primero, asegúrese de que no esté en blanco:

if ($ _POST ['email']! = "")

A continuación, desinfecte:

$ email = filter_var ($ _ POST ['email'], FILTER_SANITIZE_EMAIL);

Finalmente, valídalo como una verdadera dirección de correo electrónico:

if (! filter_var ($ email, FILTER_VALIDATE_EMAIL))

El código final se ve así:

if ($ _POST ['email']! = "") $ email = filter_var ($ _ POST ['email'], FILTER_SANITIZE_EMAIL); if (! filter_var ($ email, FILTER_VALIDATE_EMAIL)) $ errores. = "$ email es NO una dirección de correo electrónico válida.

"; else $ errors. = 'Por favor ingrese su dirección de correo electrónico.
';

Paso 5 - Validar el campo de la página de inicio

Nuevamente, el campo de la página de inicio se desinfectará y validará de la misma manera que antes en el tutorial..

Primero, asegúrese de que no esté en blanco:

if ($ _POST ['homepage']! = "")

A continuación, desinfecte y elimine cualquier carácter ilegal:

$ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL)

Finalmente, valídalo para asegurarte de que es una verdadera URL:

if (! filter_var ($ homepage, FILTER_VALIDATE_URL))

El código final se ve así:

if ($ _POST ['homepage']! = "") $ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); if (! filter_var ($ homepage, FILTER_VALIDATE_URL)) $ errors. = "$ homepage es NO una URL válida.

"; else $ errors. = 'Ingrese su página de inicio.
';

Paso 6 - Revisa errores y envía el mensaje

Ahora que hemos pasado por todos los campos, es hora de informar los errores o enviar el mensaje. Comience asumiendo que no hubo errores:

si (! $ errores) 

Luego construye el mensaje de correo electrónico:

$ mail_to = '[email protected]'; $ subject = 'New Mail from Form Submission'; $ mensaje = 'De:'. $ _POST ['nombre']. "\norte"; $ mensaje. = 'Correo electrónico:'. $ _POST ['email']. "\norte"; $ mensaje. = 'Página de inicio:'. $ _POST ['página de inicio']. "\norte"; $ mensaje. = "Mensaje: \ n". $ _POST ['mensaje']. "\ n \ n";

Y finalmente, enviar el mensaje:

correo ($ a, $ asunto, $ mensaje);

Sin embargo, si hubo errores, repórtelos y haga que el usuario vuelva a intentarlo:

eco '
'. $ errores. '
';

El proyecto completado se ve así:


'; else else $ errors. = 'Por favor ingrese su nombre.
'; if ($ _POST ['email']! = "") $ email = filter_var ($ _ POST ['email'], FILTER_SANITIZE_EMAIL); if (! filter_var ($ email, FILTER_VALIDATE_EMAIL)) $ errores. = "$ email es NO una dirección de correo electrónico válida.

"; else $ errors. = 'Por favor ingrese su dirección de correo electrónico.
'; if ($ _POST ['homepage']! = "" $ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); if (! filter_var ($ homepage, FILTER_VALIDATE_URL)) $ errors. = "$ homepage es NO una URL válida.

"; else $ errors. = 'Ingrese su página de inicio.
'; if ($ _POST ['message']! = "") $ _POST ['message'] = filter_var ($ _ POST ['message'], FILTER_SANITIZE_STRING); if ($ _POST ['message'] == "") $ errors. = 'Por favor ingrese un mensaje para enviar.
'; else else $ errors. = 'Por favor ingrese un mensaje para enviar.
'; si (! $ errores) $ mail_to = '[email protected]'; $ subject = 'New Mail from Form Submission'; $ mensaje = 'De:'. $ _POST ['nombre']. "\norte"; $ mensaje. = 'Correo electrónico:'. $ _POST ['email']. "\norte"; $ mensaje. = 'Página de inicio:'. $ _POST ['página de inicio']. "\norte"; $ mensaje. = "Mensaje: \ n". $ _POST ['mensaje']. "\ n \ n"; correo ($ a, $ asunto, $ mensaje); echo "Gracias por tu email!

"; else echo '
'. $ errores. '
'; ?>
Nombre:


Dirección de correo electrónico:


Página de inicio:


Mensaje:

Resumen

Espero que leer este tutorial te haya dado una buena introducción a las nuevas funciones de filtrado de datos de PHP. Todavía hay muchas más funciones y reglas que no estaban cubiertas, por lo que si está interesado en aprender más, consulte la sección Filtrado de datos en el manual de PHP.

  • Suscríbase a la fuente RSS de NETTUTS para obtener más artículos y artículos de desarrollo web diarios..