{"id":231530,"date":"2023-01-02T10:31:00","date_gmt":"2023-01-02T07:31:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231530"},"modified":"2023-01-02T10:33:44","modified_gmt":"2023-01-02T07:33:44","slug":"deberia-estar-usando-funciones-de-filtrado-de-php-parte-2","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/deberia-estar-usando-funciones-de-filtrado-de-php-parte-2\/","title":{"rendered":"Deber\u00eda estar usando funciones de filtrado de PHP, parte 2"},"content":{"rendered":"\n<p>En <a href=\"https:\/\/wordpress.mediadoma.com\/es\/deberia-estar-usando-funciones-de-filtrado-de-php-parte-1\/\" title=\"la publicaci\u00f3n anterior\">la publicaci\u00f3n anterior<\/a>, habl\u00e9 sobre las razones por las que usar las funciones de filtrado de PHP es m\u00e1s \u00fatil que no.<\/p>\n<p>En resumen, hacerlo ayuda a proporcionar un nivel de validaci\u00f3n integrado en el lenguaje para que no tengamos que volver a escribir algo. Naturalmente, hay advertencias.<\/p>\n<p>Por ejemplo, si tiene que validar un valor que es de caracteres no latinos, entonces tendr\u00e1 que hacerlo solo e implementar la validaci\u00f3n quiz\u00e1s con una expresi\u00f3n regular.<\/p>\n<p>Pero si est\u00e1 usando direcciones de correo electr\u00f3nico, URL, n\u00fameros, direcciones IP y muchas cosas m\u00e1s, entonces est\u00e1 en <a href=\"https:\/\/www.php.net\/manual\/en\/filter.filters.validate.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">una buena posici\u00f3n para usar algo que ya existe<\/a>.<\/p>\n<p>De todos modos, todo lo anterior todav\u00eda se trata de filtrar variables. Sin embargo, \u00bfqu\u00e9 pasa con las entradas? Es decir, los que vienen de <code>$_POST<\/code>o <code>$_GET<\/code>. Es posible usar una estrategia similar con una funci\u00f3n diferente y un conjunto de filtros diferente.<\/p>\n<p>Pero si comprende los conceptos b\u00e1sicos presentados en la \u00faltima publicaci\u00f3n, esta publicaci\u00f3n no ser\u00e1 muy diferente.<\/p>\n<h2>Funciones de filtrado de PHP, Parte 2: Entradas<\/h2>\n<p>El filtrado de entradas lo realiza la <code>filter_input<\/code>funci\u00f3n. La definici\u00f3n de esta funci\u00f3n espec\u00edfica es:<\/p>\n<blockquote>\n<p>Obtiene una variable externa espec\u00edfica por nombre y, opcionalmente, la filtra<\/p>\n<p><a href=\"https:\/\/www.php.net\/manual\/en\/function.filter-input.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">El manual de PHP<\/a><\/p>\n<\/blockquote>\n<p>Y, como se mencion\u00f3 la \u00faltima vez, esto suena un poco raro hasta que entiendes qu\u00e9 son los filtros. Afortunadamente, cubrimos esto en la publicaci\u00f3n anterior. Y aunque esta publicaci\u00f3n se centrar\u00e1 espec\u00edficamente en <code>POST<\/code>(y muy brevemente <code>GET<\/code>).<\/p>\n<p>Aunque hay otros filtros. Y estos incluyen:<\/p>\n<ul>\n<li><code>INPUT_COOKIE<\/code><\/li>\n<li><code>INPUT_SERVER<\/code><\/li>\n<li><code>INPUT_ENV<\/code><\/li>\n<\/ul>\n<p>De todos modos, dado que las dos operaciones m\u00e1s comunes que tiendo a ver en WordPress incluyen <code>POST<\/code>y <code>GET<\/code>, entonces parece importante incluir estas dos aqu\u00ed.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-159070-61e6ebe70068d.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-159070-61e6ebe70068d.png\" alt=\"Deber\u00eda estar usando funciones de filtrado de PHP, parte 2\"><\/a><\/p>\n<p>Usar estas funciones es trivialmente f\u00e1cil. Suponga que tiene un valor que proviene de algo que el usuario proporcion\u00f3 en un formulario y lo env\u00eda al servidor mediante una <code>POST<\/code>solicitud con una clave como <code>firstname<\/code>.<\/p>\n<p>El c\u00f3digo para verificarlo puede verse as\u00ed:<\/p>\n<ul>\n<li><code>filter_input(INPUT_POST, 'firstname');<\/code><\/li>\n<\/ul>\n<p>Lo cual es bastante f\u00e1cil de entender porque simplemente toma la clave, la filtra y luego devuelve un valor. Y dado que devuelve un valor, podemos configurar una cl\u00e1usula de protecci\u00f3n antes de seguir adelante con m\u00e1s trabajo:<\/p>\n<pre><code>1if (false === filter_input(INPUT_POST, 'firstname')) {\n2\u00a0\u00a0return;\n3}\n<\/code><\/pre>\n<p>Si todo sale bien, podemos seguir adelante haciendo lo que sea necesario con la informaci\u00f3n del usuario. Quiz\u00e1s necesitemos asociarlo con la publicaci\u00f3n actual por alguna raz\u00f3n:<\/p>\n<pre><code>1if (false === filter_input(INPUT_POST, 'firstname')) {\n2\u00a0\u00a0return;\n3}\n4\u00a0\n5$firstname = filter_input(INPUT_POST, 'firstname');\n6update_post_meta(get_the_ID(), 'acme-firstname', $firstname);\n7\u00a0\n8\/\/ Other code you may use...\n<\/code><\/pre>\n<p>Adem\u00e1s, puede proteger a\u00fan m\u00e1s la informaci\u00f3n mediante el uso de los <a href=\"https:\/\/www.php.net\/manual\/en\/filter.filters.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">diversos filtros<\/a> que existen. Estos se pasan como un tercer par\u00e1metro a la <code>filter_input<\/code>funci\u00f3n.<\/p>\n<h3>\u00bfY qu\u00e9 tal <code>GET<\/code>?<\/h3>\n<p>Lo bueno de esta funci\u00f3n es que, en t\u00e9rminos generales, se aplican las mismas reglas que con <code>POST<\/code>excepto que en lugar de usar <code>INPUT_POST<\/code>, usar\u00e1s <code>INPUT_GET<\/code>.<\/p>\n<p>Y luego puede trabajar con su c\u00f3digo como mejor se adapte a las necesidades de su proyecto.<\/p>\n<h3>Seguridad, Nonces, etc.<\/h3>\n<p>Recuerde, esto no es algo para ser usado en lugar de seguridad. Esto es \u00fanicamente con el prop\u00f3sito de proteger los datos antes de hacer algo con ellos.<\/p>\n<p>No reemplace la verificaci\u00f3n de valores nonce solo porque est\u00e1 verificando los datos de manera diferente.<\/p>\n<h2>Variables y Entradas<\/h2>\n<p>Recuerde, aunque estas funciones son variables muy similares y las entradas son diferentes. En otras palabras, no intente usar <code>filter_var<\/code>cuando est\u00e9 trabajando con entradas provenientes del usuario o del navegador. \u00daselo siempre que est\u00e9 trabajando con variables. Y, de manera similar, use ht e<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hay funciones nativas de WordPress para facilitar la validaci\u00f3n, pero tambi\u00e9n hay funciones de filtrado de PHP integradas para la entrada del usuario.<\/p>\n","protected":false},"author":1,"featured_media":235336,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[892,716,831,800,840,861],"tags":[1172],"class_list":["post-231530","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-desarrollador","category-guia-para-principiantes","category-php-2","category-tutoriales","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/231530","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=231530"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/231530\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/235336"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=231530"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=231530"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=231530"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}