Você está na página 1de 22
FLAVIA JOBSTRAIBIZER Guia Profissional ye FERRAMENTAS, METODOS E TUTORIAIS rs ATUL be SPV UPS) a ESITES ARRASADORES COM PHP a - MySQL . Bancos de dados | IDE Frameworks Orientacao a objetos Subversion ® Mn ics Gerenciamento de contetido 9 Geragao de PDFs ny I re ) Seguranca E muito mais € ‘@ » > we © 2009 by Digerati Books Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. Nenhuma parte deste livro, sem autorizagao prévia por escrito da editora, poderd ser reproduzida ou transmitida sejam quais forem os meios emprega- dos: eletrénicos, mecdnicos, fotogréficos, gravagdo ou quaisquer outros. Projeto Grafico Diretor Editorial Daniele Fatima Luis Matos Revisao Editor Guilherme Laurito Summa Tadeu Carmona Diagramagao Assisténcia Editorial Claudio Alves Aracelli de Lima Fabiana Pedrozo Carolina Evangelista Stephanie Lin Renata Miyagusku Capa Daniel Brito Dados Internacionais de Catalogagao na Publicagao (CIP) (Camara Brasileira do Livra, SP, Brasil) Jol Jobstraibizer, Flavia Guia Profissional PHP / Flavia Jobstraibizer. — Sao Paulo : Digerati Books, 2009. 12 p. acio de lo, 1. PHP (Linguagem de progr computador). 2. Sites da Web. I cpp 005.13 Universo dos Livros Editora Ltda. Rua Tito, 1.609 CEP 05051-001 * Sao Paulo/SP Telefone: (11) 3648-9090 * Fax: (11) 3648-9083 www.universodoslivros.com.br e-mail: editar@universodostivros.com.br Sundrio Capitulo 1 - Indo ao que interessa. Boas praticas ....... Bancos de dados e PHP: qual utilizar? wise MySQL e PHP: uma histéria de amor PHP e seguranga ... Capitulo 2 - Escolhas profissionais . Frameworks que facilitam a sua vida Prado. Metodologias de desenvolvimento: prds e contras....... Capitulo 3 - Orientacao a objeto sem frescura..........51 Construtores € CeStrutOres a. testes tceetenttenteententesntensennsaeeee BB Acesso public, private e protected as propriedades e métodos .. oo Possibi \ 55 . fi 55 Operador instanceof ww. a - - 56 Classes € MEétodos AbStratos wi ssissssesnesnsnesnsnsaensanse Constantes de objeto .... Fungao. autoload () Arquitetura MVC .... Por que todos os livros de PHP, sejam para iniciantes, sejam para profissionais avangados, sempre comegam com a mesma hist6ria? Os autores sempre comegam um livro contando a historia do PHP, desde a época de Rasmus, até os dias de hoje. Como foi odesenvolvi- mento, quem fez, e é claro, a famosa receita de bolo do “Hello World”. A historia da linguagem e suas peculiaridades séo também impor- tantes, porém essa nao é a abordagem de um livro técnico de PHP —e, portanto, nao serd a abordagem deste livro. Pensando nos pro- fissionais que j4 trabalham com PHP, sejam eles novatos ou vetera- nos, vou pular essa parte. Até mesmo porque, em se tratando de historia, e de scripts e passo a passo basicos, a Internet esta cheia desse contetido: basta uma breve busca no Google para encontrar tudo isso. Para os profissionais que desenvolvem em PHP é que este livro foi escrito. Ele foi concebido pensando nos problemas e dificulda- des que o especialista em PHP enfrenta, e mesmo no crescimento e aprendizado de novas técnicas, truques, cases, além de trazer novas abordagens para problemas classicos do desenvolvimento em PHP. Mas, s6 para que vocé se sinta em casa e para que nds autores nao percamos o costume (nao, néo vou contar a historia do PHP!), veja a linha do tempo da evolugao do PHP na Figura 1.1. PHP/FI PHP. 2.0 PHP 3.0 PHP 4.0 PHP 5.0 1995 1997 1998 2000 2004 Figura 1.1.: Linha do tempo da evolugaa do PHP. Talvez, apés ver esse grafico, vocé tenha uma pequena curiosida- de. Porque somente quatro anos apés o langamento da versao 4 & que foi langada a vers4o 5? Isso se deve ao fato de que o PHP 4 sofreu diversas melhorias ao longo dos anos 2000, sendo langadas muitas vers6es complementares durante esse perfodo, o que foi extremamente importante para o de- senvolvimento da linguagem. Entao, em meados de 2004, foi langada a versdo oficial do PHP 5. Até a metade de 2008, no entanto, ainda exis- Guia Profissional PHP tiam novas vers6es atualizadas do PHP 4, que foi a mais famosa versao dessa linguagem e a mais utilizada mundialmente. No ano de 2008 a mantenedora da linguagem propagou a informagdo de que ndo mais daria suporte para versdes 4.x, 0 que obrigou a maioria dos profissio- nais a migrarem para a versdo 5.x, porém grande parte dos sistemas construidos em PHP 4 ainda esta ativa e funcional. Vale lembrar que, em servidores antigos, vocé anda vai se de- parar — e muito — com a versao 4.0 do PHP. Esteja preparado e, se possivel, migre para versdes mais recentes, pois o ganho de de- sempenho e recursos de programagéo com essas novas versées é surpreendente. Um dos pontos fortes da verso 5.0 é a orientagdo a objetos na- tiva, uma caracteristica que exigia muito trabalho e “jeitos” para ser utilizada em PHP 4, dependendo, sobretudo, de bibliotecas externas. E, mesmo assim, nem sempre se conseguiam os resultados que hoje conseguimos com os recursos nativos e amplamente difundidos da versao 5.0. Outros fatores importantes da versao 5 so os tratamen- tos de excegées mais precisos, SPL (biblioteca interna de classes), dentre varios outros, A orientagao a objetos trouxe o PHP para o rol de grandes e po- derosas linguagens como o Java, 0 que tornou o PHP muita mais popular, e consequentemente muito mais utilizado do que antes, sendo adotado até mesmo por empresas multinacionais. Embora a maioria dos scripts desenvolvidos em PHP 4 funcionem hormalmente na versdo 5, se vocé precisar atualizar esse sistema com novos recursos avangados, certamente vai ter problemas ou, na melhor da hipoteses, vai “apanhar bastante"! Independente da verso com a qual vocé trabalha atualmente, a maior parte do que sera abordado aqui sera util para vocé. Devemos dizer, porém, que os profissionais das versdes mais atualizadas lu- crarao mais, visto que a maioria dos temas abordados sao totalmen- te antenados com a realidade e necessidades atuais, Mas, para ter sucesso, é preciso fazer do jeito certo! Boas praticas Independente da linguagem que vocé utiliza, 6 sempre ideal pro- gramar do jeito certo. Sabe-se que quase todo programador é meio preguigoso por natureza, ¢ que gosta de economizar um pouco em tempo, ou mesmo em linhas e caracteres digitados. Indo ao que interessa Nesse ponto o PHP 5 veio para somar a vida desses profissio- nais. Com os recursos de reutilizagdo de cédigo, muita coisa hoje é reaproveitada em vez de ser refeita. Porém, e mesmo assim, ainda s4o comuns alguns vicios ou mesmo praticas néo muito corretas ao programar. As abreviaturas de cédigo sao os primeiros pontos a serem con- siderados. E claro que é muito mais facil utilizar: <2? //eomandos 2> Do que: Sim, isso evitaria digitar trés miseros caracteres. Uma economia boba na verdade, pois em testes exaustivos que realizei em servido- tes de grande acesso, quando evitamos que o PHP tenha de procu- rar o significado da abreviatura, o script se torna alguns segundos mais répido. Claro que o leitor pode retrucar: “E, mais se a abreviatura fosse ruim, ndo seria possivel habilitar as short tags, que tém justamente a finalidade de abreviar 0 cédigo!". E eu até concordaria com isso em linhas gerais. Devemos lem- brar, porém, que o fato de existirem facilidades configuraveis na linguagem nao implica que todas elas sejam boas. E notério que safe _ mode habilitado 6 étimo, mas é fato que vacé também pode desabilité-lo, nao? Sendo assim, néo vamos focar a discusséo nos pontos de vista, mas sim nas boas praticas no momento de progra- mar. Outra abreviatura péssima é a que se usa no comando echo. Mui- tos profissionais utilizam: “meu cédigo’s >> Em vez de: <2php echo “meu cédige"; ?> Guia Profissional P! -xempla de Gédigo comentado, Defina uma visualizagao para o codigo-fonte |! ||! II III! Nao existe coisa pior para um desenvolvedor do que ter de rolar verticalmente a tela para ler trechos de cédigo. Dessa forma, nao custa muito delimitar uma quebra de linha para que seja mais sim- ples a leitura do script. Isso vale também como uma forma de inden- tao do cédigo, tornando a leitura mais simplificada (Figura 1.5). soho "a some sath veaie" Figura 1.5.: Exemplo de boa visualizacao para 0 cédigo-fonte Imagine que vocé tem guardado seus scripts em determinada pasta, e de um momento para outro necessita mudar o caminho de acesso a eles. Se vocé aponta seus scripts com os famosos “../..”, vocé esta fazendo mais do que errado. Procure sempre apontar caminhos absolutos em suas aplicagdes (Figura 1.6). Ganhe tempo! Indo ao que interessa an paper 12 Figura 1.6.: Uso de caminhos absolutos em cédigo PHP. Uma das mais abomindveis praticas é a de utilizar a @ para escon- der erros de programagéo. Todo desenvolvedor ja se deparou com um @$variavel. Nunca faga isso, sempre corrija 0 erro. Afinal, os avisos de erro servem para avisd-lo de que algo ndo est4 correto, e nao sdo um pedido encarecido para que vocé esconda o problema. Ao salvar arquivos, também é conveniente respeitar e manter alguma padronizagéo com fins puramente organizacionais. Se um arquive contém apenas e¢ téo-somente fungdes, vocé pode chama- -lo de email.funcoes.php. Ja se um arquivo é uma classe, pode chaméa-lo de email.class.php. Infelizmente muitos programadores intitulam arquivos de fungdes com o nome de classes, e isso compli- ca tudo no momento da manutencao. Outra dica importante é procurar manter o nome do médulo ou parte do sistema que se est4 construindo no nome do arquivo, para facilitar a compreensdo. Se, por exemplo, temos um modulo de sis- tema, com temp/ate, dados e outros, todos no mesmo diretdrio, po- demos facilitar o processo de desenvolvimento utilizando a seguinte nomenclatura de arquivos: enviando _email.template.tp1 enviando _ email.funcoes.php enviando _ email.funcoes.js enviando _ email.class.php E claro que vocé pode montar uma definigdo de diretérios e pas- tas ou mesmo nomes de arquivos. O importante é manter uma pa- dronizagao para que um dia, caso seu sistema se torne imenso, fique mais simples realizar manutengoes. Bancos de dados e PHP: qual utilizar? A escolha do banco de dados a ser utilizado @ muito pessoal. Muitos tém opiniées completamente distintas sobre cada uma das opgées disponiveis, com prés ¢ contras os mais variados. Guia Profissional P! Cada banco de dados tem a sua peculiaridade, isso ¢ um fato. Apesar disso, todos os bancos de dados mais recentemente desen- volvidos possuem conexao com o PHP. Isso se deve a popularizagdo da linguagem e suas inumeras atualizacoes. A cada ano algum de- senvolvedor para pra pensar em uma forma de conectar determ nado banco de dados ao PHP e, assim, todos nés ganhamos com inumeras bibliotecas e fungées nativas com as quais trabalhamos todos os dias. Vamos conhecer um pouco mais sobre os bancos de dados com- pativeis com PHP e suas peculiaridades. SQL UTED ITTE TTT TT EDDIE TEE Conhecido como Mini SQL, foi o pai dos bancos de dados relacio- nais — se ¢ que se pode dizer isso -, visto a €poca em que foi criado, por volta de 1994. Desenvolvido em C, teve sua popularidade aumen- tada quando foi agregado ao MySQL, mesmo que ainda existam ver- sdes originais disponiveis para uso e estudo, disponibilizadas pelo criador do software. E um banco de dados proprietario, pertencente & empresa Hughes Technologies. Pode ser utilizado com PHP, apesar de seus baixos recursos, por meio da extensdo nativa msq/. Um exemplo de script utilizando mSQL pode ser visto na Figura Tecate 2 #1ink = mag_connece ("1ocaihose', ‘usuario" © echo "ceabier\an: 2 whale (Grow = magi Figura 1.7.: Exemplo de script PHP com uso do banca de dados mSQL. Indo ao que interessa 13 pepo 14 MySQL PHI O MySQL é 0 banco de dados mais utilizado mundialmente com P. Criado em 1995, originalmente com o intuito de usar a API do mSQL para uso interno da fabricante, utilizando rotinas de baixo ni- vel (ISAM). Com a lentidaéo declarada do mSQL, resolveu-se entéo criar o MySQL, Atualmente o MySQL possui versées proprietarias e de cédigo aberto, Sua conexéo com o PHP pode ser realizada pela extenséo .mysql Principais recursos: * suporte a stored procedures, triggers e functions a partir da versao 5x; * implementagdo de cursores e views; + checagem de consisténcia de erros; * backups on-line em tempo real; * table space; * controle de transagdes; + controle de acesso por dominio; * clustering e load balancing para monitoracao de alta disponibi- lidade; * conexao segura com SSL; * replicagdo de dados de forma unidirecional ou bidirecional; * consisténcia de tipos; + excelente performance com grandes quantidades de dados; * confiabilidade de seguranca das informacées armazenadas; * suporte aos principais sistemas operacionais; * suporte sub-selects; Um exemplo de script utilizando MySQL pode ser visto na Figura 1.8: usuario", "passwora) or SELECT 1¢, nome FROM pai Guia Profissional PHP Firebird Derivado do Interbase 6.0 da Borland, é um poderoso banco de dados open source, que pode ser utilizado tanto em ambiente Web como local. Acessivel pela extensdo nativa do PHP, ibase. Principais recursos: * suporte a stored procedures e triggers, com linguagem propria (PSQL); + integridade referencial; * consumo reduzido de recursos de processamento; * verso embedded ou portatil, facilitando carregar aplicagdes em CD ou pen drive; * suporte nativo aos principais sistemas operacionais; + backups incrementais; + tabelas tempordrias; * triggers de conexao e transacao. Veja um exemplo de script utilizando Firebird na Figura 1.9. 3 a2 Soar => Sbe Figura 1.9. Exemplo de script utilizando Firebird. Oracle Banco de dados proprietario desenvolvido pela Oracle Corpora- tion, no final dos anos 1970, A partir da versdo 9, € possivel utiliza-lo perfeitamente na plataforma Web, coisa que nao era possivel em suas versées anteriores. E um dos principais bancos de dados existentes, famoso por sua robustez e confiabilidade. E possivel acessd-lo pelo PHP com as extensdes nativas .oci ou por meio da biblioteca PDQ do PHP, coma extensao .ora Principais recursos: + utiliza linguagem prépria para a escrita de sintaxes (PL/SQL); Indo ao que interessa 15 * registro completo de todas as alteragées realizadas em dados; * leitura de XML DB; * criptografia transparente; * caching de dados; * performance excelente para qualquer quantidade de dados; + robustez e estabilidade. Confira um exemplo de script usando Oracle, utilizando a exten- so .oci na Figura 1.10: while (Grow ~ ooi_fetct [Gatatement, eet Bomt)) © bacacement = oct, Figura 1.10.: Exemplo de script usando a extensdo .oci. Agora um exemplo (Figura 1.11) utilizando a extensao .ora, pela biblioteca PDO: Sap_passvord = “sen P00 ("20k saoramen. ene, Sab_seesname, Sdo_pasaword): eExeepeion Figura 1.11.: Exemplo de script usando a extensio .ora. SQL Server HITITITTEEITETTIDEEDEDTEEEET TET TTT TTT TEE De propriedade da Microsoft, o SQL Server teve sua primeira ver- so em 1988, em parceria com a empresa Sybase. De ld para cé, a par- Guia Profissional PHP ceria acabou e muita coisa mudou. O MS SQL, como é popularmente conhecido, 6 um banco de dados muito potente, porém seu uso na pla- taforma Web mostrou que ele perde bastante sua eficiéncia nesse am- biente, ao contrario da eficiéncia mostrada em aplicagdes locais. Para conectar o PHP ao SOL Server, utiliza-se a extensdo nativa .mssql. cipais recursos: * stored procedures, views, triggers e cursores; * suporte a Transact-SQL; + otimizador de consultas; + niveis de seguranca de acesso; * suporte a esquemas XML; + tamanho maximo da base de dados em toro de 4GB. Exemplo de script utilizando SOL Server (Figura 1.12): Selected = masqi_select_a(smy03, sabnandia) fecno *Conectado em". SmyO8 . "no servicor * . éayserver asgl_close (Fabhandte) PostgreSQL TIITIITIPETIDTTTIVTTEITEITIEEETTETTETETETE TTT Teve sua primeira versao oficial em 1997 (apesar de ter sido ini- ciado seu desenvolvimento em 1985), desenvolvida por um grupo de desenvolvedores independentes, e acabou ganhando muita po- pularidade nos ultimos 5 anos, devido a sua exceléncia em arma- zenar grandes quantidades de dados sem perda de desempenho. Acessivel pela extensdo nativa pg. icipais recursos: * suporte a consultas complexas; + integridade transacional; * stored procedures, views e triggers; * pontos de salvamento para rdpida recuperacao de dados; * otimizagdo de meméria em disco; Indo ao que interessa 7 * replicagao de dados; * suporte a grandes volumes de dados; + suporte a campos com até 1GB de tamanho (o maior entre to- dos os bancos de dados); * suporte a tabelas com até 32TB de tamanho (novamente o maior entre todos os bancos de dados); * suporte a bancos de dados de tamanhos ilimitados. Exemplo de seript utilizando PostgreSQL (Figura 1.13): fea ~ pe_connectace_busy (tabet s (60m) echo "a coments cata ocupada! eehe 1a cones nls esta seupada's Figura 1.13.: Exemplo de script PHP utilizando PostgreSQL. Access TIVIINTEDITETEIEDETENITTITTTETETETETTED ETT TTTETETITEL O antigo e j4 obsoleto (apesar de ainda muito utilizado) Access, de propriedade da Microsoft, também poder ser utilizado por meio da camada de abstracdo ODBC. Util apenas para aplicagGes off-line ou com uso do PHP-GTK em maquinas locais. Um exemplo de script utilizando Access pode ser visto na Figura 1.14: Do og = SONSERE TITD estado VAIUES(3, "Bie Cuunde do $u1*)*2 ‘verbose = TRUE: Sapconn + abconnect ($verbose) SrenuLe = ese exee (Sabeone, Seal)? ‘echo ("INSERT Tain faglaeser = sabe ereseneg (Sateen) fens (MIMSERT renisends com sucesne 11%) Figura 1.14.: Exemplo de script PHP para banco de dados Access. Guia Profissional PHP DB2 O poderoso banco de dados da IBM também funciona com PHP, por meio do uso da fungao nativa db2. Ndo é amplamente utilizaco, visto ainda ser mais voltado para aplicagées off-line. Um exemplo de script utilizando DB2 pode ser visto na Figura 1.15: = “SELECT 44, nome, crigen, tips FROM animate ORDER BY nome’! 4 Serme = db2_p: 7 white (Seow = a2 Figura 1.15.: Exemplo de script para bancos de dados DB2. Além desses bancos de dados, o PHP mostra todo seu poder co- nectando-se também aos seguintes bancos: el pela extensdo nativa sqlite. + SQLite3: acessivel por meio daclasse soLite3. * Paradox: pela extensdo nativa px. + Sybase: por meio da extensfo nativa sybase. + Ingres Il; pela extensdo nativa ingres. * Informix: acessivel por meio da extensao nativa ifx. + FrontBase: pela extensdo nativa ébsql. + DB++: por meio da extensdo nativa dbplus. + Dbase: acessivel pela extensdo nativa dbase. + MaxDB: por meio da extensdo nativa maxdb. * Ovrimos SQL: pela extensao nativa ovrimos. Nao ser de se estranhar se, algum tempo depois de vocé ler este livro, surgirem quatro ou cinco bancos novos suportados pelo PHP. E uma linguagem em ascensao, 0 que torna tranquila a vida do de- senvolvedor que um dia precise realizar a troca para um banco que aparentemente nao tem suporte para PHP. Partindo do principio que o PHP suporta tantos sistemas de ban- cos de dados, qual escolher entre tantos? Fazendo uma comparagao basica entre os atualmente suporta- dos e 0 tipo de utilizagao, teriamos: Indo ao que interessa 20 * MySQL, PostgreSQL, Oracle, Firebird e SQLite em ordem de popularidade, para aplicagdes Web; + MS SQL, Oracle, Access, MySQL, PostgreSQL, DB2, Firebird e os outros em ordem de popularidade, para aplicacées off-line. Note que alguns bancos de dados como Oracle, MySQL e Post- greSQL podem ser utilizados tanto para aplicagdes Web quanto para aplicagées locais com sucesso. O MySQL e o PostgreSQL, especial- mente, que foram desenvolvidos quase que exclusivamente para a Web, hoje tém comportamentos de grandes bancos originalmente criadas para aplicagdes locais e de rede como 0 Oracle. Em um apanhado geral dos bancos de dados, veja alguns cen4- tios e os bancos de dados mais recomendados para cada caso: * lojas virtuais com grande quantidade de produtos e acessos: MySAL, Oracle; * megaportais com muitos acessos, videos, e outras informa- 6es consumidas em tempo real: PostgreSQL, Oracle, MySQL; * sites corporativos com muitos acessos ou grande armazena- mento de informagées todos os momentos do dia: MySQL, Post- greSQL, Oracle; * portais de grande acesso, que sejam provedores de e-mail ou outras informagées: Oracle, PostgreSQL e MySQL; + portais de informagao, com acessos médios com picos em de- terminados horarios: MySQL, PostgreSQL; + sites com pouco contetido acessivel, mas grande quantidade de inclus6es (como portais corporativos, advocacias, sites que rece- bem pedidos ou ordens de servigo etc.): MySQL, PostgreSQL; * aplicagées off-line de estoque, gestdo e controle com grande volume de dados: Oracle, MS SQL, PostgreSQL, MySQL; * aplicagées off-line para usos gerais, intranet ou rede interna: MySQL, MS SQL, Oracle; + sites em geral com niveis de médio a alto em conteudo e visi- tas: MySQL, PostgreSQL, Firebird; * sites pequenos, pessoais, blogs e outros: MySQL, Firebird. Pelos exemplos citados é possivel perceber que um mesmo ban- co de dados serve para diversos tipos de usos, enquanto outros so mais recomendados para usos especificos. Em se tratando do PostgreSQL, por exemplo, néo é recomendével utiliz4-lo para sites Pequenos, pois seria 0 mesmo que usar uma marreta para pregar Guia Profissional PHP um preguinho. Prefira os bancos que suportam desde pequenissi- mas quantidades de dados, até enormes volumes como o MySQL. Ja em megaportais, verifique se o Oracle pode ser uma opgio, baseado no valor da licenca. Caso nao seja vidvel, o MySQL ou o PostgreSQL pode muito bem executar as mesmas fungées. E claro que sabemos que o MySQL é a grande “menina dos olhos" do PHP. Tanto isso é verdade que, nas instalagées default do PHP em qualquer servidor, é a Unica extensao que jé vem habilitada por pa- dro. Todas as outras devem ser instaladas manualmente. MySQL e PHP: uma historia de amor Desde os primérdios da criagéo do MySQL, o PHP vem sendo utilizado com ele. E muite comum digitar qualquer coisa no Google relacionada a PHP e receber resultados com 0 MySQL junto. Mais comum ainda é encontrar vasta documentacao e exemplos no site do MySQL, os quais, mesmo que sejam para quaisquer ou- tras linguagens, exibem trechos de codigos PHP para ilustré-los. Os outros bancos de dados podem também ser 6timos, mas nenhum outro se comporta tao bem com o PHP como o MySQL. Sabe-se que até mesmo as melhores ferramentas on-line para gerenciamento do MySQL s4o construidas em PHP. A grande preferéncia nacional e internacional de banco de dados 6, sem diivida, pelo MySQL. Atualmente estima-se que mais de cem milhées de copias foram baixadas ou distribuidas desde o inicio do seu desenvolvimento. E milhGes delas estao em uso em todo 6 mun- do - inclusive na Antartida — como fazem questéo de anunciar os seus desenvolvedores. De acordo com pesquisas realizadas pela Netcraft e pela Nexen (ambas recomendas pelo site do php.net), até outubro de 2008, 45% das paginas na Internet sao em PHP, contra 44% até julho do ano de 2007. E destes, 40% utilizam MySQL como banco de dados! Sao 25 milhGes de dominios! Mantive uma pesquisa durante um ano sobre a preferéncia do programador PHP em rela¢ao ao banco de dados. Os resultados Totalde participantes 1.613 Periodo De 26 de agosto de 2006 a 30 de outubro de 2007 A pesquisa ¢ ilustrada pelo grafico mostrado na Figura 1.16: Indo ao que interessa 21 spteferemmeysax sereteremorace oreteremoutt, Figura 1.16.: Larga vantagem para o MySQL. Ou seja, mais de 90% dos participantes da enquete preferem o MySQL! PHP e€ seguranca Muito se falou até bem pouco tempo atrés sobre a seguranga do PHP. Muitos nao o viam como uma linguagem séria, com a qual se pudesse fazer trafegar informag6es ou dados sigilosos, e isso levou a inumeras discussdes acerca do tema. Alguns desenvalvedores, no momento de criar aplicativos que efetuavam transagdes seguras, acabavam optando por outras lin- guagens, alegando um ou outro motivo para tal, dada a ma fama com a qual o PHP ficou conhecido por alguns problemas do passa- do. Esse cliché atualmente vem mudando, sobretudo por inumeras atualizagées pelas quais o PHP passou justamente, atualizagdes es- sas voltadas para a seguranga dos dados. As boas praticas de pro- gramacao agregadas a isso tornaram os scripts PHP muito mais se- guros, sendo uma opcdo até mesmo para aplicagées que envolvem transagées bancdrias e trafego de informagées confidenciais. Nao podemos tratar o tema da seguranca em PHP como um as- sunto exclusivo ao simples trafego de informagées confidenciais. Temos de lembrar que existem crackers e hackers que burlam o sis- tema de varias formas, ataques a banco de dados via script, ¢ todo tipo de usudrio mal intencionado que, achando uma brecha, pode danificar um sistema ou mesmo roubar informagdes de um banco de dados. Apesar de isso ser rara nos ultimos anos, ainda acontece por culpa do programador por tras da linguagem e nao da linguagem propriamente dita. Guia Profissional PHP Existe um vasto universo por tras da seguranga do PHP, e boa parte dele esta diretamente relacionado ao modelo de programa- do adotado pelo desenvolvedor. Pela falta de padrées, validagdes e exaustivas verificagoes. Outra boa parte em configuragoes que uma vez realizadas tornam toda e qualquer transagado muito mais segura. Um servidor mal configurado, permissdes de acesso incor- retas ou itens do género podem causar transtornos em qualquer linguagem. Da mesma forma que passar informagées via GET, fazer valida- des de campos apenas com Javascript - uma vez que browsers que permitem o bloqueio de Javascript so muito comuns hoje em dia = e toda uma gama de prdticas tecnicamente inseguras 6 a grande vila de qualquer aplicagao, e isso claramente independe da linguagem. Em se tratando de PHP é bom deixar claro que, diferentemente de outras linguagens como ASP, ColdFusion e até mesmo Java que € téo publicamente seguro, o PHP tem acessos que nenhuma outra tem -€ se tem, nao sao tao completos. O PHP pode acessar virtual- mente qualquer informagdo do servidor, pode acessar servigos da maquina como um cliente de e-mail, portas especificas ¢ até mes- mo rodar comandos em linha de comando, alterar configuragoes em tempo de execugao, rodar como CGI au como médulo do sistema, acessar o sistema de arquivos independente do sistema operacional no qual esteja rodando etc. Veja entao o potencial do PHP, versus sua seguranga. O PHP pode sim — pois tem poder para tal — causar muitos estragos em um servi- dor. E claro que para obter seguranga em uma linguagem com esse poder, é necessario tomar algumas medidas preventivas para que aci- dentes nao acontegam. Conhecer as fraquezas dos programas pode ser a principal chave para evitar ataques e surpresas desagradaveis. Validacao da entrada de dados Algumas famosas vulnerabilidades podem ser evitadas com a adogdo de uma metodologia segura de programagao. A primeira que vou mencionar é a mais comum: a falta de validacdo em entrada de dados. £ uma dor de cabega séria para o desenvolvedor, pois nao podemos confiar cegamente nos dados que o usudrio esta fornecen- do por um formulario. Pensando assim, todo e qualquer dado digitado pelo usuario deve passar por validagdes PHP. E isso é sério! Hoje em dia, com a popu- Indo ao que interessa 23 28 larizagao do Javascript e do AJAX, os desenvolvedores esquecem que é preciso tratar as entradas de dados com PHP acima de tudo. Diretivas automaticas |! ||!!! | III! TETTTTTEEETTT Outro item importante 6 0 register_globals. Antigamente essa diretiva, que serve para informar ao aplicativo que variaveis nao lizadas podiam ser inicializadas automaticamente e aceitas, passou a vir desligada por padrao a partir das versdes 5.x do PHP. Quando essa diretiva esta habilitada, @ possivel usar variaveis sem saber ao certo de onde elas vieram. E isso nao 6, em absoluto, nada bom! Varidveis internas que sao definidas no script em si se misturam com dados enviados pelos usuarios. Desabilitando a diretiva, 0 ce- nario muda, pois o PHP somente interpretara variaveis inicializadas. E ébvio que s6 desligar a diretiva register _ globals nao significa que 0 cédigo da aplicagdo esté seguro. Cada dado enviado deve ser validado de outras maneiras, conforme mencionei anteriormente. Sempre valide os campos de entrada de dados enviados pelo usud- tio e inicialize suas variaveis no script! Deixo claro que o proprio manual do PHP recomenda que vocé, so- mente em ultima instancia, emule a diretiva de register _ globals ligada, de forma a atender alguma necessidade especial (Figura 1.17). each (Gauperglebels as Gaupergisbe) Figura 1.17.:Emulando a diretiva register_globals Mas é bom lembrar que, infelizmente, a maior parte dos progra- madores procura formas de burlar essa diretiva — que atualmen- te os servidores de hospedagem mantém desabilitada, como ¢ o mais coerente -, encontrando métodos para continuar desenvol- vendo como na forma off da diretiva. Recomendo fortemente que isso mude, nao so pela propria satide dos scripts, como também Guia Profissional PHP tendo a ciéncia de que, na futura versao 6.0 do PHP, essa diretiva nem existird mais, 0 que vai dar um bom trabalho aos profissionais que insistem em burlar o sistema hoje, pois teréo de aprender a trabalhar do jeito certo. Na marra. O famoso deface Todo desenvolvedor j4 ouviu falar e teme muito o famoso deface. Defaces sao “pixagdes” virtuais que determinado usuario, denomi- nado defacer faz, alterando a pagina principal de um site ou sistema on-line. Para evitar um deface em seu site, alguns pontos devem ser ob- servados: * safe_mode = on! 0 safe_mode possui varias configura- ges @ utilidades adicionais, mas uma das principais é a prote- cao dos scripts PHP contra acessos remotos, uma vez que 0 PHP checa se o proprietario do script atual bate com o proprietario do arquivo a ser operado por uma fungado de arquivo. Se nao bate, 0 acesso é negado. Sendo assim, defacers que tentam abrir as pa- ginas pelos terminais de linha de comando nao o conseguem. + Permissées de arquivo: se um arquivo esta com suas per- miss6es de leitura, gravacéo e escrita habilitadas para todos os usuarios, certamente ele é um arquivo inseguro se cair nas maos erradas. Tome sempre a precaugo de verificar se as permissdes aplicadas sao realmente necessarias. Exploits Exploit 6 um pequeno programa que explora e se aproveita de vulnerabilidades em um servidor. Existem até mesmo exploits feitos em PHP, como o C99, € sua principal fungao é executar no servidor, encontrar uma forma de logar-se como root do sistema, assim con- seguindo, por vezes, subir ou deletar arquivos, entre outras coisas. PHP Injection Outra forma comum de deface em sites € por meio de PHP Injec- tion, que permite a execugdo de arquivos remotos. Eprecisoque odesenvolvedorse lembre de verificar as permissées de arquivo mencionadas anteriormente, além de manter 0 safe _ Indo ao que interessa 25 26 mode = on habilitado. Outra dica importante é desabilitar, caso vocé no esteja usando, as fungées como Shell _ exec, exec, system etc., pois tais fungdes servem justamente para a execugao de co- mandos ou aplicativos remotos. Trata-se de injetar determinados codigos em uma pagina supos- tamente vulneravel com a finalidade de descobrir uma falha e conse- quentemente aproveitar-se dela. Agora imagine que vocé tem um site, no qualo system,passthru e outras fungdes de execugdo de comandos ou scripts remotos es- tejam habilitadas. Ao acessar uma URL como: hittp://www.qualquersite.com.br/ lembre-se de que, s¢ 0 register_globals estiver off, de cara o index do seu site vai interpretar o dir mencio- nado na URL como uma variavel global. O eta 6 0 arquivo malicioso. Trata-se de um arquivo PHP (que pode ser salvo com extensdes de uma imagem, de um arquivo texto etc.) e que 0 defacer pode ter hospedado em qualquer lugar. Entao Um arquivo cmd.jpeg (o arquivo PHP salvo com extensao de ima- gem, para enganar o servicor) sera algo parecido com o mostrado ‘igura 1.18 (capturado em sites hacker): tehate (Sendse) + /emplcnatenp: =m /exp/anctenp" Figura 1 cploit cma O que a execucdo da URL Ihe traria algo parecido como uid=99(nobody) gid=98(nobody) groups=98 (nobody). Isso se deve ao fato de que a solicitagdo na URL é pelo ia do arquivo, que mostra o grupo, proprietario etc. Os comandos so todos para ambientes IX, entdo, se mudéssemos o id da URL para 1s, 0 que o arquivo cmd faria? Listaria todos os arquivos daquela pasta em que se encontra 0 index.php! Guia Profissional PHP

Você também pode gostar