{"id":8572,"date":"2015-07-24T11:22:21","date_gmt":"2015-07-24T14:22:21","guid":{"rendered":"https:\/\/king.host\/blog\/?p=8572"},"modified":"2024-06-04T08:10:13","modified_gmt":"2024-06-04T11:10:13","slug":"php-para-iniciantes-3-dicas-de-ouro","status":"publish","type":"post","link":"https:\/\/king.host\/blog\/tecnologia\/php-para-iniciantes-3-dicas-de-ouro\/","title":{"rendered":"PHP para iniciantes: 3 dicas de ouro"},"content":{"rendered":"<blockquote><p>Confira aqui algumas regras de ouro que valem para qualquer c\u00f3digo PHP criado para a web. Se voc\u00ea aprende e aplica esses princ\u00edpios, seu c\u00f3digo ser\u00e1 mais seguro e sua vida de programador um pouco mais tranquila.<\/p><\/blockquote>\n<h3>&#8216;Escape&#8217; seu\u00a0c\u00f3digo<\/h3>\n<p>A maioria dos scripts PHP \u00e9 produzido com vistas \u00e0 algum tipo de &#8216;output&#8217;. Depois de criar o c\u00f3digo, voc\u00ea precisa se certificar de que\u00a0o tipo de\u00a0sa\u00edda esteja compilando devidamente. Se voc\u00ea est\u00e1 fazendo uma p\u00e1gina HTML ou um arquivo XML, o PHP n\u00e3o pode decidir\u00a0isso automaticamente. Desse modo, voc\u00ea precisa declarar qual ser\u00e1 a sa\u00edda do arquivo.<\/p>\n<p>Para entender melhor, \u00e9 \u00fatil saber como funciona HTML. O M significa Mark-up que, em outras palavras, significa que o arquivo n\u00e3o cont\u00e9m apenas conte\u00fado, mas tamb\u00e9m eu\u00a0mostra\u00a0comandos que definem como p\u00e1gina ser\u00e1 mostrada. Os comandos marcam as se\u00e7\u00f5es de conte\u00fado (como t\u00edtulos, texto em negrito, scripts, etc.) ou incorporam caracteres especiais \u00a0e imagens por exemplo. Para separar conte\u00fados de comandos, o HTML reserva tr\u00eas caracteres: &#8216;&lt;&#8216;,&#8217;&gt;&#8217; e &#8216;&amp;&#8217;. As tags\u00a0HTML s\u00e3o envolvidos com os caracteres &#8216;&lt;&#8216; e &#8216;&gt;&#8217; , por isso, h\u00e1 menos que voc\u00ea queira confus\u00e3o, voc\u00ea n\u00e3o deve\u00a0us\u00e1-los para qualquer outra coisa no conte\u00fado.<\/p>\n<p>Se for necess\u00e1rio usar esses caracteres voc\u00ea precisar\u00e1 usar um recurso chamado &#8216;HTML entities&#8217;. Eles s\u00e3o comandos que &#8216;embedam&#8217; caracteres especiais e evitam que eles entrem em conflito com o seu c\u00f3digo. Isso se aplica especialmente aos quatro caracteres abaixo:<\/p>\n<table style=\"height: 155px;\" width=\"302px\">\n<thead>\n<tr>\n<th style=\"text-align: center;\">Car\u00e1cter<\/th>\n<th style=\"text-align: center;\">significado<\/th>\n<th style=\"text-align: center;\">&#8216;entities&#8217;<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: center;\">&lt;<\/td>\n<td style=\"text-align: center;\">menos que<\/td>\n<td style=\"text-align: center;\"><code>&amp;lt;<\/code><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center;\">&gt;<\/td>\n<td style=\"text-align: center;\">maior que<\/td>\n<td style=\"text-align: center;\"><code>&amp;gt;<\/code><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center;\">&amp;<\/td>\n<td style=\"text-align: center;\">e comercial<\/td>\n<td style=\"text-align: center;\"><code>&amp;amp;<\/code><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center;\">&#8220;<\/td>\n<td style=\"text-align: center;\">Double-quote<\/td>\n<td style=\"text-align: center;\"><code>&amp;quot;<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"http:\/\/www.freeformatter.com\/html-escape.html\" target=\"_blank\" rel=\"noopener\">Esta ferramenta <\/a>ajuda voc\u00ea a ter o controle desses elementos, substituindo automaticamente os caracteres especiais pelas\u00a0&#8216;entities&#8217;.<\/p>\n<h3>Use um filtro de &#8216;input&#8217;<\/h3>\n<p>Hoje em dia, o PHP \u00e9 uma das linguagens de script mais utilizados na web. Justamente porque \u00e9 t\u00e3o f\u00e1cil aprender o b\u00e1sico da linguagem e sair programando, muitas pessoas publicam c\u00f3digos inseguros online. Existem dezenas de maneiras para voc\u00ea estragar seu c\u00f3digo PHP, mas os maiores problemas acontecem quando o programador esquece de filtrar o &#8216;input&#8217;, ou declarar o &#8216;escape output&#8217; do c\u00f3digo.<\/p>\n<p>Por incr\u00edvel que pare\u00e7a, estes n\u00e3o s\u00e3o erros que apenas iniciantes cometem: muitos scripts populares de PHP, escritos por grandes comunidades de programadores, t\u00eam updates de seguran\u00e7a por causa de filtragem de &#8216;input&#8217;\u00a0mal feita. A falta de filtragem de &#8216;input&#8217;\u00a0pode expor o servidor e os dados para um ataque facilmente, e atualmente muitos desses ataques s\u00e3o automatizados.\u00a0Filtragem e Escaping s\u00e3o dois princ\u00edpios essenciais em codifica\u00e7\u00e3o da web que voc\u00ea precisa para aplicar qualquer linguagem que voc\u00ea usa. Obtenha\u00a0detalhes sobre <a href=\"http:\/\/php.net\/manual\/pt_BR\/function.filter-input.php\" target=\"_blank\" rel=\"noopener\">como fazer o &#8216;filter_input&#8217; aqui<\/a>.<\/p>\n<h3>Conversando com a base de dados<\/h3>\n<p>N\u00e3o importa se voc\u00ea est\u00e1 lendo ou gravando um banco de dados, usar &#8216;prepared statements&#8217; \u00e9 a maneira mais f\u00e1cil, conveniente e segura de se comunicar com ela.<\/p>\n<p>Olhando para um arquivo HTML, voc\u00ea vai ver que ele t\u00eam tanto o conte\u00fado como os comandos (que s\u00e3o, como j\u00e1 citamos, as instru\u00e7\u00f5es sobre como mostr\u00e1-lo). As\u00a0consultas SQL s\u00e3o escritas da mesma maneira, o que pode levar ao mesmo problema, ou seja, a\u00a0confus\u00e3o entre comandos e conte\u00fados. \u00a0Em HTML isso gera\u00a0layouts quebrados ou ataques de &#8216;cross-site scripting&#8217;. Se o mesmo ocorre com bancos de dados, todos os seus dados viram isca f\u00e1cil para ataques que podem roubar ou danificar seus dados.<\/p>\n<p>Para o HTML, a \u00fanica resposta \u00e9 sempre declarar a sa\u00edda do seu conte\u00fado para que ele n\u00e3o\u00a0seja interpretado como tags HTML. Voc\u00ea pode fazer isso com seu SQL tamb\u00e9m, usando fun\u00e7\u00f5es de escape para seu banco de dados (como mysql_real_escape_string ()), mas h\u00e1 uma maneira melhor, que \u00e9 a utiliza\u00e7\u00e3o de\u00a0&#8216;prepared statements&#8217;. Com este m\u00e9todo, o seu comando e o conte\u00fado s\u00e3o enviados ao longo de canais separados para o banco de dados, o que significa que voc\u00ea vai precisar se preocupar muito menos com ataques do tipo &#8220;inje\u00e7\u00e3o de SQL&#8221;.<\/p>\n<p>Abaixo voc\u00ea pode conferir um\u00a0exemplo de &#8216;prepared statements&#8217;:<\/p>\n<p>D\u00ea uma olhada na instru\u00e7\u00e3o SQL do exemplo abaixo. Voc\u00ea pode ver que em vez de colocar o $title, n\u00f3s colocamos um espa\u00e7o reservado em vez disso, chamado :title, e ent\u00e3o n\u00f3s &#8220;ligamos&#8221; o valor que queremos no espa\u00e7o reservado. Assim, o SQL e os dados s\u00e3o passados para a base de dados separadamente:<\/p>\n<p><img decoding=\"async\" class=\"alignnone wp-image-8579 size-full\" src=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2015\/07\/php.png\" alt=\"php\" width=\"435\" height=\"96\" title=\"\" srcset=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2015\/07\/php.png 435w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2015\/07\/php-300x66.png 300w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2015\/07\/php-400x88.png 400w\" sizes=\"(max-width: 435px) 100vw, 435px\" \/><\/p>\n<p>Aqui voc\u00ea confere o exemplo completo:<\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone wp-image-8580 size-full\" src=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2015\/07\/phpfull.png\" alt=\"phpfull\" width=\"542\" height=\"295\" title=\"\" srcset=\"https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2015\/07\/phpfull.png 542w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2015\/07\/phpfull-300x163.png 300w, https:\/\/cdn-cms.king.host\/blog-hlg\/uploads\/2015\/07\/phpfull-400x218.png 400w\" sizes=\"(max-width: 542px) 100vw, 542px\" \/>[<\/p>\n<p>Use essas tr\u00eas dicas para come\u00e7ar a programar com mais seguran\u00e7a. Para continuar aprendendo, al\u00e9m de ficar ligado aqui no blog, leia mais materiais nas fontes que usamos para escrever este post como o portal <a href=\"http:\/\/php.net\/\" target=\"_blank\" rel=\"noopener\">PHP.net<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Confira aqui algumas regras de ouro que valem para qualquer c\u00f3digo PHP criado para a web. Se voc\u00ea aprende e aplica esses princ\u00edpios, seu c\u00f3digo ser\u00e1 mais seguro e sua vida de programador um pouco mais tranquila. &#8216;Escape&#8217; seu\u00a0c\u00f3digo A maioria dos scripts PHP \u00e9 produzido com vistas \u00e0 algum tipo de &#8216;output&#8217;. Depois de [&hellip;]<\/p>\n","protected":false},"author":253,"featured_media":8582,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1179,8],"tags":[],"class_list":["post-8572","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvimento","category-tecnologia"],"_links":{"self":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts\/8572","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/users\/253"}],"replies":[{"embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/comments?post=8572"}],"version-history":[{"count":2,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts\/8572\/revisions"}],"predecessor-version":[{"id":35827,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts\/8572\/revisions\/35827"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/media\/8582"}],"wp:attachment":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/media?parent=8572"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/categories?post=8572"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/tags?post=8572"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}