{"id":231915,"date":"2023-01-02T10:31:00","date_gmt":"2023-01-02T07:31:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231915"},"modified":"2023-01-02T11:24:49","modified_gmt":"2023-01-02T08:24:49","slug":"voce-deve-estar-usando-funcoes-de-filtragem-php-parte-2","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/voce-deve-estar-usando-funcoes-de-filtragem-php-parte-2\/","title":{"rendered":"Voc\u00ea deve estar usando fun\u00e7\u00f5es de filtragem PHP, parte 2"},"content":{"rendered":"\n<p>No <a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/voce-deve-estar-usando-funcoes-de-filtragem-php-parte-1\/\" title=\"post anterior\">post anterior<\/a>, falei sobre as raz\u00f5es pelas quais usar fun\u00e7\u00f5es de filtragem PHP \u00e9 mais \u00fatil do que n\u00e3o.<\/p>\n<p>Resumindo, isso ajuda a fornecer um n\u00edvel de valida\u00e7\u00e3o embutido na linguagem para que n\u00e3o tenhamos que reescrever algo. Naturalmente, h\u00e1 ressalvas.<\/p>\n<p>Por exemplo, se voc\u00ea est\u00e1 tendo que validar um valor que \u00e9 de caracteres n\u00e3o latinos, ent\u00e3o voc\u00ea ter\u00e1 que ir sozinho e implementar a valida\u00e7\u00e3o com talvez uma express\u00e3o regular.<\/p>\n<p>Mas se voc\u00ea estiver usando endere\u00e7os de e-mail, URLs, n\u00fameros, endere\u00e7os IP e tantas outras coisas, estar\u00e1 em <a href=\"https:\/\/www.php.net\/manual\/en\/filter.filters.validate.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">uma boa posi\u00e7\u00e3o para usar algo que j\u00e1 existe<\/a>.<\/p>\n<p>De qualquer forma, todos os itens acima ainda s\u00e3o sobre a filtragem de vari\u00e1veis. Mas e as entradas? Ou seja, aqueles que v\u00eam de <code>$_POST<\/code>ou <code>$_GET<\/code>. \u00c9 poss\u00edvel usar uma estrat\u00e9gia semelhante com uma fun\u00e7\u00e3o diferente e um conjunto de filtros diferente.<\/p>\n<p>Mas se voc\u00ea entender o b\u00e1sico apresentado no \u00faltimo post, ent\u00e3o este post n\u00e3o ser\u00e1 muito diferente.<\/p>\n<h2>Fun\u00e7\u00f5es de Filtragem PHP, Parte 2: Entradas<\/h2>\n<p>A filtragem de entradas \u00e9 feita pela <code>filter_input<\/code>fun\u00e7\u00e3o. A defini\u00e7\u00e3o para esta fun\u00e7\u00e3o espec\u00edfica \u00e9:<\/p>\n<blockquote>\n<p>Obt\u00e9m uma vari\u00e1vel externa espec\u00edfica por nome e, opcionalmente, a 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\">O manual do PHP<\/a><\/p>\n<\/blockquote>\n<p>E, como mencionado da \u00faltima vez, isso soa um pouco estranho at\u00e9 voc\u00ea entender o que s\u00e3o os filtros. Felizmente, abordamos isso no post anterior. E embora este post se concentre especificamente <code>POST<\/code>(e muito brevemente <code>GET<\/code>).<\/p>\n<p>Mas existem outros filtros. E estes incluem:<\/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 qualquer forma, como as duas opera\u00e7\u00f5es mais comuns que costumo ver no WordPress incluem <code>POST<\/code>e <code>GET<\/code>, parece importante incluir essas duas aqui.<\/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=\"Voc\u00ea deve estar usando fun\u00e7\u00f5es de filtragem PHP, parte 2\"><\/a><\/p>\n<p>Usar essas fun\u00e7\u00f5es \u00e9 trivialmente f\u00e1cil. Suponha que voc\u00ea tenha um valor vindo de algo que o usu\u00e1rio forneceu em um formul\u00e1rio e ele est\u00e1 enviando para o servidor usando uma <code>POST<\/code>solicita\u00e7\u00e3o com uma chave como <code>firstname<\/code>.<\/p>\n<p>O c\u00f3digo para verificar isso pode ser algo assim:<\/p>\n<ul>\n<li><code>filter_input(INPUT_POST, 'firstname');<\/code><\/li>\n<\/ul>\n<p>O que \u00e9 f\u00e1cil de entender porque simplesmente pega a chave, filtra e retorna um valor. E como ele retorna um valor, podemos configurar uma cl\u00e1usula de guarda antes de avan\u00e7ar com mais trabalho:<\/p>\n<pre><code>1if (false === filter_input(INPUT_POST, 'firstname')) {\n2\u00a0\u00a0return;\n3}\n<\/code><\/pre>\n<p>Se tudo der certo, podemos seguir em frente fazendo o que for necess\u00e1rio com as informa\u00e7\u00f5es do usu\u00e1rio. Talvez precisemos associ\u00e1-lo ao post atual por qualquer motivo:<\/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>Al\u00e9m disso, voc\u00ea pode proteger ainda mais as informa\u00e7\u00f5es com o uso dos <a href=\"https:\/\/www.php.net\/manual\/en\/filter.filters.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">diversos filtros<\/a> existentes. Estes s\u00e3o passados \u200b\u200bcomo um terceiro par\u00e2metro para a <code>filter_input<\/code>fun\u00e7\u00e3o.<\/p>\n<h3>E sobre o qu\u00ea <code>GET<\/code>?<\/h3>\n<p>O bom dessa fun\u00e7\u00e3o \u00e9 que, de um modo geral, as mesmas regras s\u00e3o v\u00e1lidas como <code>POST<\/code>except em vez de usar <code>INPUT_POST<\/code>, voc\u00ea usar\u00e1 <code>INPUT_GET<\/code>.<\/p>\n<p>E ent\u00e3o voc\u00ea pode trabalhar com seu c\u00f3digo da maneira que melhor se adequar \u00e0s necessidades do seu projeto.<\/p>\n<h3>Seguran\u00e7a, Nonces, etc.<\/h3>\n<p>Lembre-se, isso n\u00e3o \u00e9 algo para ser usado no lugar da seguran\u00e7a. Isso \u00e9 puramente para fins de seguran\u00e7a de dados antes de fazer qualquer coisa com eles.<\/p>\n<p>N\u00e3o substitua a verifica\u00e7\u00e3o de valores nonce apenas porque voc\u00ea est\u00e1 verificando os dados de forma diferente.<\/p>\n<h2>Vari\u00e1veis \u200b\u200be Entradas<\/h2>\n<p>Lembre-se, embora essas fun\u00e7\u00f5es sejam vari\u00e1veis \u200b\u200bmuito semelhantes e as entradas sejam diferentes. Em outras palavras, n\u00e3o tente usar <code>filter_var<\/code>quando estiver trabalhando com entradas provenientes do usu\u00e1rio ou do navegador. Use-o sempre que estiver trabalhando com vari\u00e1veis. E, da mesma forma, use ht e<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Existem fun\u00e7\u00f5es nativas do WordPress para facilitar a valida\u00e7\u00e3o, mas tamb\u00e9m existem fun\u00e7\u00f5es de filtragem PHP integradas para entrada do usu\u00e1rio.<\/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":[898,722,837,806,846,867],"tags":[1170],"class_list":["post-231915","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-desenvolvedor","category-guia-para-iniciantes","category-php-8","category-tutoriais","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231915","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=231915"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231915\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/235336"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=231915"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=231915"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=231915"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}