{"id":1152,"date":"2025-08-04T22:41:12","date_gmt":"2025-08-05T04:41:12","guid":{"rendered":"https:\/\/www.emanuelpaxtian.com\/?p=1152"},"modified":"2025-08-04T22:52:32","modified_gmt":"2025-08-05T04:52:32","slug":"validacion-y-sanitizacion-de-datos-en-php-con-filter_var","status":"publish","type":"post","link":"https:\/\/emanuelpaxtian.com\/blog\/validacion-y-sanitizacion-de-datos-en-php-con-filter_var\/","title":{"rendered":"Validaci\u00f3n y Sanitizaci\u00f3n de Datos en PHP con\u00a0filter_var()"},"content":{"rendered":"\n<p>En PHP, la seguridad de los datos es crucial para prevenir vulnerabilidades como&nbsp;<strong>SQL Injection<\/strong>,&nbsp;<strong>XSS (Cross-Site Scripting)<\/strong>&nbsp;y otros ataques comunes. Una de las formas m\u00e1s eficientes y nativas de validar y sanitizar datos es usando la funci\u00f3n&nbsp;<strong><code>filter_var()<\/code><\/strong>.<\/p>\n\n\n\n<p>En este art\u00edculo, aprender\u00e1s:<br>\u2705&nbsp;<strong>Qu\u00e9 es&nbsp;<code>filter_var()<\/code>&nbsp;y por qu\u00e9 usarlo<\/strong><br>\u2705&nbsp;<strong>Diferencias entre validaci\u00f3n y sanitizaci\u00f3n<\/strong><br>\u2705&nbsp;<strong>Filtros m\u00e1s \u00fatiles para formularios, emails y URLs<\/strong><br>\u2705&nbsp;<strong>Ejemplos pr\u00e1cticos de uso<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>1. \u00bfQu\u00e9 es&nbsp;<code>filter_var()<\/code>?<\/strong><\/h2>\n\n\n\n<p><code>filter_var()<\/code>&nbsp;es una funci\u00f3n de PHP que permite&nbsp;<strong>validar<\/strong>&nbsp;y&nbsp;<strong>sanitizar<\/strong>&nbsp;datos aplicando filtros predefinidos. Es m\u00e1s seguro que funciones obsoletas como&nbsp;<code>htmlspecialchars()<\/code>&nbsp;o expresiones regulares complejas en algunos casos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Sintaxis b\u00e1sica:<\/strong><\/h3>\n\n\n\n<p>php<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">filter_var($valor, $filtro, $opciones);<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>$valor<\/code><\/strong>: Dato a filtrar (ej:&nbsp;<code>$_POST['email']<\/code>).<\/li>\n\n\n\n<li><strong><code>$filtro<\/code><\/strong>: Tipo de filtro a aplicar (ej:&nbsp;<code>FILTER_VALIDATE_EMAIL<\/code>).<\/li>\n\n\n\n<li><strong><code>$opciones<\/code><\/strong>&nbsp;(opcional): Configuraciones adicionales.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>2. Validaci\u00f3n vs. Sanitizaci\u00f3n<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th><strong>Validaci\u00f3n<\/strong><\/th><th><strong>Sanitizaci\u00f3n<\/strong><\/th><\/tr><\/thead><tbody><tr><td>Verifica si un dato cumple ciertas reglas (ej: un email v\u00e1lido).<\/td><td>Limpia el dato, eliminando caracteres peligrosos.<\/td><\/tr><tr><td>Devuelve&nbsp;<code>false<\/code>&nbsp;si no es v\u00e1lido.<\/td><td>Devuelve el dato modificado.<\/td><\/tr><tr><td>Ej:&nbsp;<code>FILTER_VALIDATE_EMAIL<\/code><\/td><td>Ej:&nbsp;<code>FILTER_SANITIZE_STRING<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>3. Filtros M\u00e1s \u00datiles<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Validaci\u00f3n de datos comunes<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Filtro<\/th><th>Descripci\u00f3n<\/th><th>Ejemplo<\/th><\/tr><\/thead><tbody><tr><td><code>FILTER_VALIDATE_EMAIL<\/code><\/td><td>Verifica si es un email v\u00e1lido.<\/td><td><code>filter_var(\"user@example.com\", FILTER_VALIDATE_EMAIL)<\/code><\/td><\/tr><tr><td><code>FILTER_VALIDATE_URL<\/code><\/td><td>Comprueba si es una URL v\u00e1lida.<\/td><td><code>filter_var(\"https:\/\/example.com\", FILTER_VALIDATE_URL)<\/code><\/td><\/tr><tr><td><code>FILTER_VALIDATE_IP<\/code><\/td><td>Valida una direcci\u00f3n IPv4 o IPv6.<\/td><td><code>filter_var(\"192.168.1.1\", FILTER_VALIDATE_IP)<\/code><\/td><\/tr><tr><td><code>FILTER_VALIDATE_INT<\/code><\/td><td>Verifica si es un n\u00famero entero.<\/td><td><code>filter_var(42, FILTER_VALIDATE_INT)<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Sanitizaci\u00f3n de datos peligrosos<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Filtro<\/th><th>Descripci\u00f3n<\/th><th>Ejemplo<\/th><\/tr><\/thead><tbody><tr><td><code>FILTER_SANITIZE_STRING<\/code>&nbsp;(OBSOLETO en PHP 8.1+)<\/td><td>Elimina etiquetas HTML.<\/td><td><code>filter_var(\"&lt;script&gt;alert('XSS')&lt;\/script&gt;\", FILTER_SANITIZE_SPECIAL_CHARS)<\/code><\/td><\/tr><tr><td><code>FILTER_SANITIZE_EMAIL<\/code><\/td><td>Elimina caracteres no v\u00e1lidos en emails.<\/td><td><code>filter_var(\"user@&lt;script&gt;example.com\", FILTER_SANITIZE_EMAIL)<\/code><\/td><\/tr><tr><td><code>FILTER_SANITIZE_URL<\/code><\/td><td>Limpia URLs eliminando caracteres peligrosos.<\/td><td><code>filter_var(\"https:\/\/&lt;script&gt;example.com\", FILTER_SANITIZE_URL)<\/code><\/td><\/tr><tr><td><code>FILTER_SANITIZE_NUMBER_INT<\/code><\/td><td>Solo deja n\u00fameros enteros.<\/td><td><code>filter_var(\"a1b2c3\", FILTER_SANITIZE_NUMBER_INT)<\/code>&nbsp;\u2192&nbsp;<code>123<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>4. Ejemplos Pr\u00e1cticos<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Validar un formulario de contacto<\/strong><\/h3>\n\n\n\n<p>php<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n$email = $_POST&#x5B;'email'] ?? '';\n$url = $_POST&#x5B;'website'] ?? '';\nif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {\n    echo \"El email no es v\u00e1lido\";\n    } elseif (!filter_var($url, FILTER_VALIDATE_URL)) {\n    echo \"La URL no es v\u00e1lida\";\n    } else {\n    echo \"Datos correctos, procesando...\";\n    }\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\"><strong>Sanitizar una entrada para evitar XSS<\/strong><\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n$comentario = $_POST&#x5B;'comentario'] ?? '';\n$comentario_limpio = filter_var($comentario, FILTER_SANITIZE_SPECIAL_CHARS);\n\necho $comentario_limpio; \/\/ Convierte &lt;script&gt; en &amp;lt;script&amp;gt;\n\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\"><strong>Validar y sanitizar un n\u00famero entero<\/strong><\/h3>\n\n\n\n<p>php<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n$edad = $_POST&#x5B;'edad'] ?? '';\n$edad_limpia = filter_var($edad, FILTER_SANITIZE_NUMBER_INT);\nif (filter_var($edad_limpia, FILTER_VALIDATE_INT, &#x5B;\"options\" =&gt; &#x5B;\"min_range\" =&gt; 18, \"max_range\" =&gt; 99]])) {\n    echo \"Edad v\u00e1lida: $edad_limpia\";\n    } else {\n    echo \"Edad debe ser entre 18 y 99\";\n    }\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>5. Conclusi\u00f3n<\/strong><\/h2>\n\n\n\n<p>\u2705&nbsp;<strong><code>filter_var()<\/code>&nbsp;es una herramienta poderosa para validar y sanitizar datos.<\/strong><br>\u2705&nbsp;<strong>Reduce riesgos de inyecci\u00f3n de c\u00f3digo y ataques XSS.<\/strong><br>\u2705&nbsp;<strong>Es m\u00e1s seguro que funciones antiguas como&nbsp;<code>mysql_real_escape_string()<\/code>.<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En PHP, la seguridad de los datos es crucial para prevenir vulnerabilidades como&nbsp;SQL Injection,&nbsp;XSS (Cross-Site Scripting)&nbsp;y otros ataques comunes. Una de las formas m\u00e1s eficientes y nativas de validar y&hellip;<\/p>\n","protected":false},"author":1,"featured_media":642,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,10],"tags":[],"class_list":["post-1152","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php","category-seguridad"],"_links":{"self":[{"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/posts\/1152","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/comments?post=1152"}],"version-history":[{"count":6,"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/posts\/1152\/revisions"}],"predecessor-version":[{"id":1161,"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/posts\/1152\/revisions\/1161"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/media\/642"}],"wp:attachment":[{"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/media?parent=1152"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/categories?post=1152"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/emanuelpaxtian.com\/blog\/wp-json\/wp\/v2\/tags?post=1152"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}