{"id":228,"date":"2007-09-12T15:37:00","date_gmt":"2007-09-12T18:37:00","guid":{"rendered":"https:\/\/blog.wieczorek.com.br\/novo\/?p=228"},"modified":"2022-02-24T15:39:21","modified_gmt":"2022-02-24T18:39:21","slug":"praticas-para-seguranca-no-php","status":"publish","type":"post","link":"https:\/\/blog.wieczorek.com.br\/index.php\/2007\/09\/12\/praticas-para-seguranca-no-php\/","title":{"rendered":"Pr\u00e1ticas para seguran\u00e7a no PHP"},"content":{"rendered":"\n<p>Este post \u00e9 parte de um artigo escrito por Er Galv\u00e3o Abbott &#8211;&nbsp;<a href=\"http:\/\/www.galvao.eti.br\/\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/www.galvao.eti.br<\/a><\/p>\n\n\n\n<p>A linguagem PHP \u00e9, sem d\u00favida, uma das mais populares quando o assunto \u00e9 desenvolvimento de aplica\u00e7\u00f5es web, por\u00e9m a mesma \u00e9 frequentemente alvo de duras cr\u00edticas por parte da pr\u00f3pria comunidade de desenvolvimento, e n\u00e3o \u00e9 raro presenciarmos aplica\u00e7\u00f5es extremamente vulner\u00e1veis que, com toda a certeza, d\u00e3o raz\u00e3o a estas cr\u00edticas.<\/p>\n\n\n\n<p>Este preconceito, totalmente equivocado, tem suas origens especialmente na extrema flexibilidade de configura\u00e7\u00e3o e uso da linguagem e no n\u00famero cada vez maior de desenvolvedores inexperientes que come\u00e7am sua carreira desenvolvendo aplica\u00e7\u00f5es PHP, ignorando quest\u00f5es b\u00e1sicas, seja por falta de conhecimento ou porque est\u00e3o procurando agilizar a sua produ\u00e7\u00e3o pessoal.<\/p>\n\n\n\n<p>Existem 6 requisitos b\u00e1sicos que toda aplica\u00e7\u00e3o deveria possuir e que implementar\u00e3o o m\u00ednimo de seguran\u00e7a em tudo o que voc\u00ea desenvolver.<\/p>\n\n\n\n<p><strong>Requisito 1: Nunca utilize register_globals<\/strong><br>Register_globals \u00e9 sem d\u00favida alguma a diretiva de configura\u00e7\u00e3o mais popular e pol\u00eamica j\u00e1 implementada no PHP. \u00c9 popular entre os desenvolvedores por tornar o processo de programa\u00e7\u00e3o muito mais \u00e1gil e pr\u00e1tico. \u00c9 pol\u00eamica porque retira tanto do programador quanto do interpretador da linguagem a responsabilidade em definir a origem das informa\u00e7\u00f5es utilizadas pela aplica\u00e7\u00e3o. Esta diretiva causou tantos problemas que come\u00e7ou a vir desabilitada por default a partir da vers\u00e3o 4.2.0 e ser\u00e1 eliminada na vers\u00e3o 6.<a><\/a><\/p>\n\n\n\n<p><strong>Requisito 2: Use require e n\u00e3o include<\/strong><br>O comando include e seus derivados \u2013 como include_once &#8211; \u00e9 frequentemente usado em detrimento do comando require. Este fato curioso a princ\u00edpio \u00e9 conseq\u00fc\u00eancia da similaridade do comando include com outras linguagens, como C e Java. O que muita gente n\u00e3o sabe, por\u00e9m, \u00e9 que este comando carrega consigo um risco muito grande para sua aplica\u00e7\u00e3o: se por algum motivo a inclus\u00e3o do arquivo falhar \u2013 erro de digita\u00e7\u00e3o, disco corrompido, etc&#8230; \u2013 ser\u00e1 gerado um erro de n\u00edvel warning, um n\u00edvel leve de erro que n\u00e3o causa a parada da execu\u00e7\u00e3o do script. Utilizando o comando require, garantimos que, no caso de falha na carga do arquivo seja gerado, al\u00e9m do erro de n\u00edvel warning, um erro de n\u00edvel fatal. Isso significa que a execu\u00e7\u00e3o do seu script ser\u00e1 imediatamente interrompida neste caso.<\/p>\n\n\n\n<p><strong>Requisito 3: Filtre a entrada de dados!<\/strong><br>Um dos principais conceitos de seguran\u00e7a \u00e9 a filtrar os dados que s\u00e3o recebidos antes de utiliz\u00e1los. A falta de filtragem \u00e9 a causa in\u00fameros problemas de seguran\u00e7a, incluindo o infame SQL Injection ou Inje\u00e7\u00e3o de SQL.<\/p>\n\n\n\n<p><strong>Requisito 4: Sem erros para o usu\u00e1rio<\/strong><br>As mensagens de erro foram feitas para que o desenvolvedor possa trabalhar de forma mais pr\u00e1tica e descobrir o que ele est\u00e1 fazendo de errado. Observem, entretanto, que, quando uma aplica\u00e7\u00e3o atinge maturidade suficiente para \u201centrar em produ\u00e7\u00e3o\u201d, torna-se imperativo que o usu\u00e1rio n\u00e3o visualize mensagens de erro. A raz\u00e3o disso \u00e9 muito simples: mensagens de erro freq\u00fcentemente trazem informa\u00e7\u00f5es sens\u00edveis.<\/p>\n\n\n\n<p><strong>Requisito 5: Esconda do servidor web o que ele n\u00e3o precisa acessar<\/strong><br>Quantos de n\u00f3s n\u00e3o usamos em nossas aplica\u00e7\u00f5es um arquivo, tipicamente chamado de congif.php ou setup.php onde guardamos, por exemplo, usu\u00e1rio e senha da base de dados? N\u00e3o h\u00e1 nada de errado nisso, mas cuidado: se este arquivo n\u00e3o gera sa\u00edda de informa\u00e7\u00e3o em HTML porque deix\u00e1-lo acess\u00edvel via web? A solu\u00e7\u00e3o \u00e9 simples: movemos o arquivo para fora da raiz web.<\/p>\n\n\n\n<p><strong>Requisito 6: Use Criptografia<\/strong><br>Dados sigilosos s\u00e3o chamados assim por um motivo. Quando tratamos especificamente de senhas \u00e9 impressionante a quantidade de aplica\u00e7\u00f5es web que gravam senhas em texto puro na base de dados. Ora, se a senha possui a import\u00e2ncia que tem e quem a escolhe \u00e9 o usu\u00e1rio, por que algu\u00e9m mais precisa ler essa senha? Se a senha possui este peso em nossa aplica\u00e7\u00e3o, n\u00e3o podemos nos dar ao luxo de fazer com que ela trafegue pela aplica\u00e7\u00e3o totalmente exposta.<\/p>\n\n\n\n<p>Fonte: Er Galv\u00e3o &#8211;&nbsp;<a href=\"http:\/\/www.galvao.eti.br\/\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/www.galvao.eti.br<\/a>; PHP Magazine &#8211;&nbsp;<a href=\"http:\/\/www.phpmagazine.com.br\/\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/www.phpmagazine.com.br<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Este post \u00e9 parte de um artigo escrito por Er Galv\u00e3o Abbott &#8211;&nbsp;http:\/\/www.galvao.eti.br A linguagem PHP \u00e9, sem d\u00favida, uma das mais populares quando o assunto \u00e9 desenvolvimento de aplica\u00e7\u00f5es web, por\u00e9m a mesma \u00e9 frequentemente alvo de duras cr\u00edticas por parte da pr\u00f3pria comunidade de desenvolvimento, e n\u00e3o \u00e9 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20,68,98],"tags":[99,269],"class_list":["post-228","post","type-post","status-publish","format-standard","hentry","category-desenvolvimento","category-php","category-seguranca-de-ti","tag-seguranca","tag-tecnicas"],"_links":{"self":[{"href":"https:\/\/blog.wieczorek.com.br\/index.php\/wp-json\/wp\/v2\/posts\/228","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.wieczorek.com.br\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.wieczorek.com.br\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.wieczorek.com.br\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.wieczorek.com.br\/index.php\/wp-json\/wp\/v2\/comments?post=228"}],"version-history":[{"count":1,"href":"https:\/\/blog.wieczorek.com.br\/index.php\/wp-json\/wp\/v2\/posts\/228\/revisions"}],"predecessor-version":[{"id":229,"href":"https:\/\/blog.wieczorek.com.br\/index.php\/wp-json\/wp\/v2\/posts\/228\/revisions\/229"}],"wp:attachment":[{"href":"https:\/\/blog.wieczorek.com.br\/index.php\/wp-json\/wp\/v2\/media?parent=228"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.wieczorek.com.br\/index.php\/wp-json\/wp\/v2\/categories?post=228"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.wieczorek.com.br\/index.php\/wp-json\/wp\/v2\/tags?post=228"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}