PHP Magazine 005

download PHP Magazine 005

of 28

Transcript of PHP Magazine 005

  • 8/8/2019 PHP Magazine 005

    1/28PHP Magazine - 5a Edio -

  • 8/8/2019 PHP Magazine 005

    2/282 - 5a Edio - PHP Magazine

    sumrio

    No esquecer

    Sombra no fundoDa imagem

    editorial

    artigos

    Apresentao

    Equipe

    Caixa de Entrada

    Chamadas

    PHP e o Conhecimento Cientfico ao redor do mundopor Leandro Schwarz

    Protegendo cdigos em PHP-GTKpor Pablo Dall'Oglio

    SQL Injection em PHP: vulnerabilidades e prevenopor Ismael Rocha

    Desenvolvendo em trs camadas com PHP, MVC e AJAXpor Almir Neto e Otvio Calaa

    Os nmeros do FISL 9.0

    9 Frum de Software Livre e muito PHPpor Helton Ritter

    PHP-GTK

    SQL Injection

    Arquitetura

  • 8/8/2019 PHP Magazine 005

    3/28PHP Magazine - 5a Edio - 3

    EditoresFlvio Zacharias Fagundes, [email protected] Arago, [email protected]

    AdministraoFlvio Zacharias Fagundes, [email protected] Arago, [email protected]

    ComercialFlvio Zacharias FagundesRicardo Arago

    Projeto grficoFlvio Zacharias FagundesRicardo Arago

    Reviso tcnicaRicardo Arago da SilvaFlvio Zacharias FagundesHelton Ritter

    Reviso - Lngua PortuguesaCamilla Carvalho, [email protected]

    www.phpmagazine.org.br

    [email protected]

    Contato/[email protected]

    Marketing

    [email protected]

    apresentao

    Prezado leitor,

    A equipe da PHP Magazine inicia esta edio pedindo desculpas pela demora na publicao deste exemplar. Os parti-cipantes da produo da revista so voluntrios e, portanto, nem sempre dispem de tempo livre para trabalhar em prolda comunidade. Nossa 5 edio vem acompanhada de uma grande novidade. Graas ao apoio do Instituto de Desen-volvimento de Software Livre (IDSL www.idsl.org.br), conseguimos mudar para o domnio www.phpmagazine.org.br.

    A partir de agora, o IDSL passa a nos apoiar institucionalmente, caracterizando ainda mais o nosso papel social.

    Nesta edio contamos com artigos em trs reas distintas. Leandro Schwarz, que participou em todas as edies darevista, apresenta um artigo sobre a linguagem PHP e sua expresso diante do conhecimento cientfico pelo mundo.Nosso parceiro Pablo DallOglio, nos prestigia mais uma vez com um belo artigo sobre PHP-GTK, demonstrando comoaplicar segurana em seus aplicativos. Ismael Rocha tambm participa com um artigo sobre segurana, com vulnerabili-dades e preveno de SQL Injection. Almir Neto e Otvio Calaa participaram com um artigo sobre arquitetura em trscamadas. Nosso agradecimento a esses autores que dedicaram seu tempo para contribuir com a revista.

    Agradecemos a vocs pelo apoio, pois este o nosso maior incentivo para trabalhar mais e mais. Vale lembrar quenosso portal j est prximo de atingir 10.000 usurios, um grande marco para todos.

    Gostaramos de registrar a participao e agradecer ao Helton Ritter, que nos ltimos meses se fez presente nas ati-vidades da revista.

    Tenha uma boa leitura! Aguardamos suas sugestes e crticas.

    Equipe da PHP Magazine

  • 8/8/2019 PHP Magazine 005

    4/284 - 5a Edio - PHP Magazine

    caixa de entrada

    SugestoAcompanho a revista desde a primeira edio. Quero daros parabns pelas matrias que tm me ajudado muito.

    Gostaria de pedir uma matria sobre PHPReports, poisele um utilitrio de relatrios muito eficaz. Eu mesmoserei o mais beneficiado com isso, pois tenho muitosrelatrios para desenvolver e pouco conhecimento noassunto.

    Leandro Coelho

    Sugesto anotada, Leandro. Este tema sempre do inte-resse de todos, mas infelizmente at o momento no foisubmetido para a revista. Aproveitamos a oportunidadepara comunicar que iniciantes tambm podem contribuircom artigos, pois nossa equipe est disposta a orient-

    los na pesquisa e desenvolvimento do tema abordado. Acreditamos que a viso de um iniciante, bem como oempenho em publicar o trabalho e contribuir com a co-munidade, servir de modelo a ser seguido pelos de-mais.

    Mais sugestesSou pesquisador na rea de percepo auditiva e udiodigital. Tenho trabalhado com PHP h algum tempo eestou trabalhando com projetos na rea de percepoauditiva e e-learning com aplicaes browser-based. Ficaa sugesto de um artigo sobre como construir aplicaes

    Web com PHP, usando mdulos e templates na formaque o Joomla ou o PHPNuke fazem. Parabns pela revis-ta!!!

    Rael Toffolo

    Agradecemos sua participao, Rael! Toda sugesto bem-vinda. Na segunda edio apresentamos um artigosobre a utilizao do Mambo, um gerenciador de conte-do muito semelhante ao Joomla. Que sua mensagemsirva de incentivo para a submisso de um artigo relacio-

    ENVIE E-MAIL [email protected] sero publicadas mensagens com os seguintes dados do remetente: nome completo, cidade e estado.

    A redao se reserva o direito de selecionar e adaptar as mensagens sem alterar o contedo geral.

    Submisso de artigoPrimeiramente gostaria de parabeniz-los pelo excelente trabalho e manifestar meu to-tal apoio. Sou desenvolvedor PHP e trabalho em uma instituio de segurana/insegurana da informao. Constru um manual de polticas e prticas de programaosegura em PHP (que tambm serve para outras linguagens voltadas pra Web) e gostari-a de divulgar o meu trabalho. Como extenso, pois possui exemplos prticos detalha-

    dos e informaes sobre as diversas vulnerabilidades, sugiro uma coluna na PHP Maga-zine sobre programao segura, onde a cada edio seria publicado um artigo tratandode uma determinada vulnerabilidade.

    Ismael Rocha :: Braslia - DF

    Recebemos este e-mail h algum tempo e trocamos vrias mensagens com o leitor. Is-mael demonstrou-se realmente interessado, desenvolvendo um tema e, aps alguns fe-edbacks, apresentamos seu artigo nesta edio. Nosso muito obrigado pela sua participa-

    o. Que sirva de exemplo aos demais leitores.

    nado ao tema.

    Novos ColaboradoresJ venho acompanhando todo o trabalho de vocs. Achei

    muito interessante o surgimento da PHP Magazine. Litodas as edies e fiquei muito encantado com todas. Aquarta edio est tima. Tenho experincia de quatroanos com a Linguagem PHP e interesse em colaborar.Que procedimentos devo tomar?

    Josu Camelo dos Santos :: Anpolis-GO

    Estamos sempre buscando pessoas interessadas em co-laborar. Voc pode participar submetendo algum artigode seu interesse ou integrando-se a nossa equipe decolaboradores, atividade que deve ser assumida comoum compromisso. Em breve estaremos disponibilizando

    para todos os interessados um documento de diretrizes,onde ficar definida a forma de participao da equipeda revista.

    Interesse em participaoEstou interessado em ajudar a revista. Eu poderia escre-ver sobre integrao do Adobe Flex com o PHP. O queacham?

    Ricardo Cerqueira :: Caruaru-PE

    Estamos aguardando sua participao, Ricardo! E, comosempre, nos colocamos disposio para auxili-lo no

    que for necessrio Basta entrar em contato.ElogiosParabns a toda equipe pelo belo trabalho!

    Raquel Dezidrio Souto

    com grande satisfao que recebemos suas mensa-gens de agradecimento e apoio. Para quem desconhece:a Raquel participou da segunda edio da revista com oartigo PHP nas Geocincias e, desde ento, tem acom-panhado nosso trabalho.

  • 8/8/2019 PHP Magazine 005

    5/28PHP Magazine - 5a Edio - 5

    EventosA PHP Magazine apia a iniciativa de eventos como cursos gratuitos, palestras e fruns. Para divulgar na revista, envie informa-es sobre o evento para [email protected] , que teremos prazer em contribuir com a divulgao.

    chamadas

    PARTICIPEEst disponvel a seo para inscries, garanta j sua participao.

    Voc pode apoi-lo divulgando em seu site e obtendo um pequeno espao para sua logomarca no site do portal doevento.

    Verifique as formas de inscries, saiba mais clicando aqui.

    O que o CONAPHP?CONAPHP significa COngresso NAcional de PHP. umgrande evento de PHP que consiste em vrias palestrasde PHP apresentadas por palestrantes nacionais e inter-nacionais reputados.

    Quando?O CONAPHP 2008 vai decorrer nos dias 18 e 19 de Outu-bro.

    Onde?O CONAPHP 2008 est inserido no CONISLI 2008. O CO-

    NISLI um evento sobre Software Livre muito popularno Brasil que sempre teve a forte presena da comuni-dade de PHP desde 2005. Este ano a comunidade dePHP do Brasil se empenhou para organizar no CONISLIum grande evento de PHP com o nome CONAPHP.O CONISLI 2008 ter lugar nas da FIAP - Faculdade deInformtica e Administrao Paulista - em So Paulocom endereoAv. Lins de Vasconcelos, 1264, bairro Acli-mao.

    Quem?Quem melhor conhece os interesses e necessidades da

    comunidade de PHP, so os prprios membros da comu-nidade. Por isso, o CONAPHP organizado exclusiva-mente por membros bem ativos da comunidade de PHPBrasileira.

    O tamanho da comunidade de PHP no mundo est esti-mado em 4,5 milhes de profissionais que trabalham nodesenvolvimento e manuteno de mais de 20 milhesde sites. A comunidade de PHP no Brasil tem cerca de5% do total global, portanto so mais de 200.000 profis-sionais de PHP brasileiros.

    Devido ao seu grande tamanho, j se pode contar que acomunidade de PHP do Brasil venha participar em pesono CONAPHP. O CONISLI 2008 tem uma expectativa deaudincia de 1.500 congressistas, dos quais pelo menos500 devero vir para assistir s palestras do CONAPHP.

    Quem vem palestrar?

    Como demonstrao da sua fora e capacidade de orga-nizao, a comunidade de PHP do Brasil est trazendopara este evento 2 palestrantes internacionais, para a-lm de vrios outros nomes conhecidos da cena de PHPdo Brasil.

    Andrei ZmievskiAndrei Zmievski um reputado de-senvolvedor no ncleo de PHP. Ele mais conhecido porter sido o criador do sistema de templates Smartye pelaextenso de criao de aplicaes desktopPHP-GTK.

    Este ano ele vem falar do PHP 6, nomeadamente damaior mudana da qual ele foi o principal arquiteto: su-porte nativo a Unicode. Este recurso vai facilitar muito odesenvolvimento de aplicaes internacionalizadas emque o texto usa alfabetos distintos dos usados na Europae Amricas, como por exemplo os usados nos paises da

    sia, Leste Europeu, tais como Rssia, China, Japo,Coreia, etc..

    Csar RodasCsar Rodas o outro palestrante inter-nacional convidado. Apesar de ser ainda um jovem uni-versitrio que estuda no Paraguai, Csar j participouem atividades dignas de grande destaque, como o fatode ter sido o vencedor do PHP Programming Innovation

    Awardde 2007 organizado pelo site PHPClasses.org.

    Neste evento Csar vir falar sobre o seu mais recentetrabalho de destaque incluido na iniciativa Google Sum-mer of Code (GSoC). Trata-se do desenvolvimento derecursos avanados para o popular sistema de blogsWordPress que permitem lidar com arquivos de conte-do de grande porte em sistemas mais apropriados paraesse efeito, como o YouTube, Amazon S3, Google Pica-sa, etc..

  • 8/8/2019 PHP Magazine 005

    6/286 - 5a Edio - PHP Magazine

    cincia

    PHP e o

    Conhecimento CientficoConhecimento CientficoConhecimento Cientficoao redor do mundo.

    por Leandro Schwarz

    A linguagem PHP amplamente utilizada em scriptspara fins comerciais. Usa-se nodesenvolvimento dos carrinhos de compras, das vitrines de lojas virtuais, dos stios deleiles e similares. Atravs de tecnologias hbridas, como AJAX, tambm possvel a

    sua utilizao como aplicaes de bate-papo, por exemplo, do servio de atendimentoao cliente via Chat. Muito difundido tambm o uso da linguagem PHP em scriptsdefruns e listas de discusses; pouco se conhece, entretanto, sobre o uso da lingua-gem PHP como ferramenta de auxlio difuso de pesquisas acadmicas. Sendo as-sim, o artigo pretende um breve esclarecimento sobre o uso da linguagem para a di-fuso da cincia e tecnologia no Brasil e no mundo.

    O objetivo deste artigo no desmerecer linguagensde programao como as linguagens C, C++ ou Delphi,e nem as linguagens que j so muito utilizadas para

    este fim, como a linguagem Java. O objetivo principaldeste artigo mostrar e incentivar a utilizao da lingua-gem PHP como ferramenta para a difuso do conheci-mento cientfico.

    Grande parte dos programadores em PHP utiliza alinguagem como suporte busca e populao de basesde dados. Pode-se verificar tal fato com uma simplesbusca na Internet por scriptsem PHP sobre temas como

    loginde cliente, loja virtual e contador de visitas. Onmero de resultados ultrapassa em muito a busca porqualquer script relacionado a calculadoras, grficos ma-temticos e similares.

    A razo incontestvel para este fato o uso muitomais difundido de lojas virtuais e ferramentas de e-commerce do que das ferramentas matemticas. Atporque, o mercado de trabalho dos programadores PHPest voltado para este nicho.

    O que cabe aos programadores de PHP saber que alinguagem tambm utilizada dentro do meio cientficocomo ferramenta de interface entre bases de dados epesquisadores, possibilitando que experimentos cientfi-cos sejam realizados de forma mais eficaz.

    Sero apresentadas sete aplicaes da linguagemPHP no meio acadmico. Todas foram publicadas emrevistas de divulgao cientfica, nacionais e internacio-nais. Um breve resumo de cada aplicao ser feito.

    1. Transporte de plasma (Itlia 2003)Foi desenvolvido um equipamento para estudar o

    transporte de plasma, o aquecimento do plasma e a cor-rente na presena do aquecimento adicional ocasionadopela radiofreqncia. As descargas de plasma duram emtorno de 1,5 segundos e, em modo normal de operao,um experimento realizado a cada 20 ou 25 minutos.

    Devido natureza experimental do equipamento e dacomplexidade do fenmeno envolvido, a confiabilidadedo experimento obtida com a validao manual de ca-da experimento por meio da verificao da validade decada medio e da procura por falhas nos sensores.Considerando-se que cada experimento gera entre 1.200e 2.000 medies, grande quantidade de tempo e recur-sos humanos deve ser alocada para a validao de cadaexperimento.

    Para automatizar o sistema, uma rede neural artificialfoi treinada para validar cada experimento, possibilitan-do que mais experimentos possam ser realizados em ummesmo dia, com custos mais baixos. A rede neural de-senvolvida roda em um servidor LINUX RedHat e arma-zena os dados em um banco de dados relacional MySQL.O ncleo da validao do experimento foi feito em MA-TLAB 6.

    Os dados armazenados no banco de dados podemser acessados pelos usurios por meio de uma interface

    Web. A interface foi desenvolvida em navegadores daInternet por apresentar-se mais leve que os softwaresusuais. A interface foi desenvolvida em PHP 4.1.2, e ro-da em servidor Apache 1.3.12.

  • 8/8/2019 PHP Magazine 005

    7/28PHP Magazine - 5a Edio - 7

    Atravs da interfaceWeb possvel detectar a funcio-nalidade do sistema atravs de uma visualizao grficabaseada nos resultados de validao de um dado experi-mento. Um esquema de caixas coloridas permite identifi-carem-se sensores falhos, que aparecem em uma cordiferenciada. Clicando-se em cima de cada caixa, uma

    janela pop-up surge com os dados e a localizao dosensor.

    Outra funcionalidade do sistema permite que ousurio procure no banco de dados por experimentosarquivados de qualidade, fornecendo os dados do ex-perimento que interessem ao pesquisador. Os usuriostambm podem selecionar um subconjunto de dadosarquivados, especificando um sensor [Buceti, 2003].

    2. Reaes nucleares (China 2004)

    Os dados nucleares compreendem tanto as proprie-dades do ncleo dos tomos, bem como as leis funda-mentais que regem as iteraes nucleares.

    Embora alguns dos institutos nucleares, empresas edepartamentos das universidades chinesas tenham cons-trudo suas prprias bases de dados e ferramentas, nohavia uma base de dados chinesa disponvel na Internetat 2001.

    As maiores bases de dados internacionais armazenamos dados em arquivos de texto em formato ASCII compadronizaes diferentes, por exemplo, os formatos Eva-luated Nuclear Data File(ENDF) e Evaluated Nuclear S-tructure Data File(ENSDF) Estes formatos so, em geral,complexos para usurios no-especializados, o que apre-

    senta grandes dificuldades na verificao e processa-mento de arquivos grandes.

    O sistema desenvolvido, chamado NDOS (NuclearData On-line Services), inclui um repositrio de dadoscentral utilizando um banco de dados relacional e permi-te a busca interativa dos dados atravs de tecnologiabaseada na WEB.

    O sistema NDOS tambm pode reconstruir facilmenteos dados nucleares em formatos padronizados, tais co-mo ENDF e ENSDF, a partir do repositrio central de da-dos. Esta caracterstica oferece flexibilidade para compa-ra dados proveniente de bases de dados diferentes e oprocessamento on-linedos dados.

    O sistema roda em plataforma Linux e foi desenvolvi-do em PHP com a base de dados MySQL. A base de da-dos e os servios principais do sistema NDOS residemem uma estao de trabalho PC, mantido pelo Instituteof Heavy Ion Physics(IHIP) da Universidade de Pequim.

    A maioria das funes de gerenciamento da base de da-dos, tais como a adio de dados, podem ser realizadosremotamente.

    Uma ferramenta para plotar grficos foi desenvolvi-da utilizando a biblioteca JPGraph para PHP. A ferramen-

    ta permite que o usurio plote grficos com os dadosprovenientes da base de dados ou dos dados processa-dos atravs de alguma das outras ferramentas do siste-ma. Pode-se plotar grficos utilizando dados de diver-

    sas bases de dados em um mesmo grfico, com coresdiferentes para cada curva, permitindo a sua compara-o. As escalas, os ttulos e os eixos X e Y podem serescolhidos pelos usurios de maneira simplificada. Oseixos podem ser exibidos em escala linear ou logartmi-ca, pois os grficos em escala logartmica apresentam ainformao de maneira mais eficaz para sesses de bai-xa energia. Os grficos podem ser salvos em formatoPostscript ou imagens GIF no computador do usurio,para visualizao posterior ou impresso. Os grficosdisponveis esto no formato de grficos 2-D, entretanto,grficos 3-D sero desenvolvidos para visualizao emperspectiva das distribuies angulares versus energiaincidente ou distribuies de energia secundrias versusenergia incidente [Fan, 2004].

    3. Mapeamento gentico (Sua 2004)

    Um grande desafio na biologia atual a determina-o da funo gentica em larga escala. Os padres es-

    tabelecidos e o vocabulrio controlado facilitam a inte-grao dos dados experimentais com o trabalho compu-tacional. As bases de dados estruturadas e as ferramen-tas de busca possibilitam meios de caracterizar a funode um dado gene.

    O seqenciamento gentico completo da planta orna-mentalArabidopsisfoi alcanado no ano de 2000 e per-mitiu monitorar a expresso desta planta em escala ge-ntica usando microarrays. O arrayATH1, por exemplo,representa aproximadamente 23.750 genes daArabidop-sis. Milhares de arraysforam processados desde ento.

    A combinao mltiplas bases de dados gera dvidas

    quanto sua compatibilidade, em particular quando secomparam dados de diferentes organismos.

    Um sistema on-line foi desenvolvido para facilitar adescoberta da funo gentica, compreendendo umabase de dados de expresso gentica e um conjunto deferramentas de busca e anlise, chamado GENEVESTI-GATOR. O GENEVESTIGATOR foi desenvolvido comosendo uma ferramenta on-lineamigvel para anlise dedados de expresses genticas em larga escala. Consistede uma base de dados MySQL e um servidor rodandoscriptsem linguagem PHP.

    O GENEVESTIGATOR acessado gratuitamente paratodas as instituies acadmicas. Uma vez que a base dedados possui tanto dados pblicos quanto confidenciais,um sistema usurios com perfil dual fiocriado para ger-enciar o acesso de usurios de perfil pblico e privado.Todos os usurios devem se registrar e iniciar umasesso com usurio e senha. Os dados coletados pararegistro so utilizados apenas para administrao dabase de dados e para aperfeioar o funcionamento dosistema. As informaes pessoais no so compartilha-das com terceiros [Zimmermann, 2004].

    4. Tele-consulta mdica (Turquia 2004)A equipe mdica de regies remotas tem grande difi-

    culdade para conseguir a opinio de mdicos especialistaem uma determinada rea, principalmente porque estes,

  • 8/8/2019 PHP Magazine 005

    8/28

  • 8/8/2019 PHP Magazine 005

    9/28PHP Magazine - 5a Edio - 9

    de base de dados MySQL verso 4.0.22-standard.

    Os autores planejam a expanso do sistema paracontemplar a identificao de quaisquer espcies, sendotambm adaptado para os indivduos futuramente en-contrados [Druzhinina, 2005].

    6. Sensoriamento Remoto (Brasil 2007)

    Na Universidade Federal do Rio Grande do Sul(UFRGS), Leonardo Monteiro Brys e Srgio Florncio deSouza desenvolveram um sistema na Internet para dis-ponibilizar conceitos e definies de tcnicas de Proces-samento Digital de Imagens Orbitais (PDI).

    Os autores justificam a escolha da linguagem PHP ofato de ser uma linguagem de programao server-side,possuir boa apresentao ao usurio e eficiente suportematemtico e suporte a um grande nmero de banco dedados. Outras vantagens incluem a facilidade de imple-mentar, em PHP, cdigos escritos em linguagem C, C++

    e Perl e a gratuidade da linguagem.O artigo faz referncia implementao da pgina

    clculos geodsicos on-line como ferramenta de suporteao Geoprocessamento no Curso de Engenharia Cartogr-fica da UFRGS

    O sistema desenvolvido permite que o usurio faa oupload de uma imagem em esquema de cores RGB eoutra em esquema pancromtico, as quais sero mis-turadas dinamicamente. O script transforma o sistemaRGB em sistema HSV (Hue, Saturation, Value Tonali-dade, Saturao e Brilho) e combina as imagens, preser-vando as caractersticas espectrais da imagem RGB e as

    caractersticas espaciais da imagem pancromtica [Brys,2007].

    7. Densidade de probabilidade (EstadosUnidos 2007)

    A proposta do artigo foi explorar a utilizao da lin-guagem PHP para proporcionar representaes visuaispara a distribuio de probabilidade de rbitas caticas.

    Foi desenvolvido um sistema em PHP que permitia asseguintes funcionalidades: seleo automtica de umsistema de clculo; seleo do sistema de clculo pelousurio; a exibio da distribuio densidade de probabi-lidade na forma de tabela; e os grficos da densidade deprobabilidade.

    Todos os sistemas so enviados a partir de formul-rios HTML no mtodo POST para a pgina em PHP, naqual cada sistema de clculo representado por umafuno de clculo especfica. Para o acesso s variveispostadas, foi utilizada a varivel $_REQUEST.

    Os grficos foram implementados em uma pgina emseparado utilizando a biblioteca GD. O artigo disponibi-liza parte do cdigo [Wang, 2007].

    Consideraes finais

    Este artigo apontou as vrias aplicaes no comerci-ais da linguagem PHP, demonstrando a possibilidade deimplementao de sistemas para divulgao do conheci-mento e desenvolvimento cientfico.

    Espera-se que, em relao ao desenvolvimento de

    interfaces grficas, suporte matemtico e processamentode imagens on-line, este documento tenha apontado alinguagem PHP como uma alternativa vivel aos profis-sionais do ramo cientfico das empresas, universidades ecentros tecnolgicos brasileiros.

    Referncias e links sugeridosBRYS, L.M.; SOUZA, S.F. Aplicao da linguagem PHPem sensoriamento remoto. In: Anais XIII Simpsio Brasi-leiro de Sensoriamento Remoto, Florianpolis: 2007.

    BUCETI, G.; CENTIOLI, C.; IANNONE, F.; PANELLA, M.;RIZZO, A.;VITALE, V.A rating system for post pulse datavalidation. Fusion Engineering and Design. 2003.

    DRUZHININA, I.S.; KOPCHINSKIY, A.G.; KOMOJ, M.;BISSETT, J.; SZAKACS, G.; KUBICEK, G.P. An oligonu-cleotide barcode for species identification in Trichodermaand Hypocrea. Fungal Genetics and Biology, v. 42, 2005.

    FAN, T.S.; GUO, Z.Y.; YE, W.G.; LIU, W.L.; FENG, Y.G.;SONG, X.X.; HUANG, G.; LIU, T.J.;HONG, Y.J.; LIU, C.;CHEN, J.X.; TANG, G.Y.; SHI, Z.M.; HUANG, X.L.; CHEN,J.E. NDOS: nuclear data online services. Annals of Nu-clear Energy,v. 31, 2004.

    KUNTALP, M.; AKAR, O.A simple and low-cost Internet-based teleconsultation system that could effectivelysolve the health care access problems in underservedareas of developing countries. Computer Methods andPrograms in Biomedicine, n 75, 2004.

    WANG, Z.J.; YANG, H.H.; DING, J. Webgraphics for thecomputation of invariant measures. Applied Mathematicsand Computation, v. 187, 2007.

    ZIMMERMANN, P.; HIRSCH-HOFFMANN, M.; HENNING,

    L.; GRUISSEM, W. GENEVESTIGATOR. Arabidopsis mi-

    Leandro Schwarz [email protected] eletricista pela Universidade Federal deSanta Catarina (UFSC). Mestre em EngenhariaEltrica (rea de concentrao: EngenhariaBiomdica) pela UFSC. Atuando desde 2000 comdesenvolvimento Web, possui slidos conhecimentosem PHP e MySQL.

    Atualmente professor do Departamento de Designdo Centro de Artes (CEART) da Universidade do Es-

    tado de Santa Catarina (UDESC), e colaborador doLaboratrio de Instrumentao (Labin) do Centro deCincias da Sade e do Esporte (CEFID) da UDESC.

  • 8/8/2019 PHP Magazine 005

    10/2810 - 5a Edio - PHP Magazine

    PHP-GTK

    Protegendo cdigos em

    PHPPHPPHP---GTKGTKGTK

    por Pablo DallOglio

    Este artigo apresenta algumas formas simples de proteger o acesso ao cdigo-fontede aplicaes desenvolvidas em PHP-GTK.

    O PHP uma linguagem que nasceu na Web e nes-te ambiente que mais adotado. O ambiente Web re-gido pela arquitetura cliente-servidor, em que h o cdi-go do programa interpretado pelo servidor e o resultado

    de sua execuo. Normalmente nesse modelo, o resul-tando cdigo HTML para ser visualizado no navegadordo cliente. Neste caso, a prpria arquitetura cliente-servidor impede o usurio de ter acesso ao cdigo-fontedo programa, a menos que a pessoa tenha acesso aoservidor da aplicao.

    Quando desenvolvemos uma aplicao grfica emPHP-GTK, rodamos a aplicao de forma local, utilizandorecursos da mquina cliente, da mesma forma que emaplicaes em Delphi ou Visual Basic. Mas, no caso doPHP-GTK, o cdigo da aplicao interpretado direta-mente pelo executvel do PHP. Desta forma, o cdigo-

    fonte fica exposto ao cliente, caso ele queira investig-lo.

    O objetivo de se proteger um cdigo em PHP-GTKpode ser comercial, impedindo que o cliente tenha aces-so indevido ao cdigo-fonte e realize cpias piratas, mastambm pode evitar que um usurio curioso investigueo cdigo do mesmo e interfira no seu funcionamento,tomando conhecimento de senhas de acesso ao bancode dados, por exemplo. As tcnicas que iremos estudarse aplicam tanto para a utilizao com PHP-GTK, quantopara utilizao no desenvolvimento de uma aplicaoPHP Web.

    1. O programa

    Para demonstrar as tcnicas de proteo de cdigo,em primeiro lugar vamos construir uma pequena aplica-o a ser protegida, chamada app.php.

    A nossa aplicao de exemplo extremamente sim-ples. Ela est toda contida em uma classe chamadaAp-

    plication. A classeApplicationna verdade filha da clas-se GtkWindow, logo, pelo mecanismo de herana, ela uma janela.

    Dentro da janela Application, criaremos uma caixavertical (GtkVBox) e dentro desta caixa vertical colocare-mos dois widgets. O primeiro ($this->nome) um objetoGtkEntrypara digitao de um nome qualquer. J o se-gundo, ($botao) um boto que ao ser clicado executa-

    r o mtodo onClick().

    A tarefa do mtodo onClick exibir uma janela demensagem com o nome digitado pelo usurio.

  • 8/8/2019 PHP Magazine 005

    11/28PHP Magazine - 5a Edio - 11

    Figura 1 - Aplicao de exemplo

    Agora, para executar tal aplicao, teremos de escre-ver um segundo programa para incluir a classeapp.php e, ento, instanciar um objeto desta classe eexecutar seu mtodo show_all(), para exibir a janela.

    2. Compactao

    A forma mais simples de se proteger o cdigo de umprograma compactando-o. Este mecanismo protege oacesso ao programa de grande parte dos usurios, mas

    facilmente reversvel, tendo em vista que basta o usu-rio final da aplicao descobrir que ele deve descom-pactar um arquivo para ter acesso ao seu cdigo-fonte.

    Para compactar a aplicao, iremos utilizar o aplicati-vo GZ do Linux, que compacta o programa app.php,gerando um outro, chamado app.php.gz.

    # gzip app.php

    Agora, para utilizar o programa ao invs de simples-mente executarmos o comando include_once sobre oarquivo compactado, precisamos indicar qual o wrapperutilizado para sua interpretao. Neste caso, o wrapper

    compress.zlib. O arquivo descompactado instantane-amente e a classe fica disponvel.

    3. Criptografia Simples

    Podemos melhorar um pouco mais o algoritmo anteri-or, criptografando o cdigo da aplicao alm de com-pact-la. Para tal, iremos escrever um pequeno progra-

    ma empacotador da aplicao. Este programa ir ler ocdigo da aplicao por meio da funo fi-le_get_contents(), para ento remover as tags de incioe fim do com a funo substr(). Aps, iremoscodificar o fonte do programa com a funobase64_encode(). Note que aqui poderamos estar utili-zando mtodos mais poderosos de criptografia. Ao final,gravamos o cdigo compactado e criptografado no ar-

    quivo app.php.cri.

    Agora, para podermos executar tal programa cripto-grafado, temos de escrever outro programa. Este pro-grama ir ler o contedo do arquivo criptografado, cha-mado app.php.cri, descriptograf-lo e executar estecdigo por meio da funo eval(). Aps, o funcionamen-to do programa continua o mesmo.

    Voc deve ter percebido que as duas tcnicas de-monstradas at aqui so bastante simples. Da mesmaforma que so simples de utilizar so simples de seremdesfeitas, uma vez que o usurio ter acesso ao cdigo-fonte que ir descriptografar e executar o cdigo fonte.Desta forma, facilmente utilizamos um comando echo()no lugar do eval() para exibirmos o cdigo-fonte em te-la. Claro que nenhum usurio final faz isto, mas qualquerdesenvolvedor com conhecimentos bsicos em PHP podefazer isto.

    4. bcompiler

    O bcompiler uma extenso do PHP que faz parte doPECL (The PHP Extension Community Library), que umrepositrio de extenses comunitrias para PHP, escritasem linguagem C. Funciona assim como o PEAR (PHPExtension and Application Repository), que um reposi-trio de extenses escritas em PHP.

    O bcompiler foi escrito com o objetivo de codificararquivos, classes ou funes por completo em uma apli-cao proprietria.

    De acordo com o autor da bcompiler, Alan Knowles, autilizao da extenso pode melhorar o desempenho emat 30%, embora o cdigo codificado seja bem maiorem termos de tamanho fsico ocupado pelo arquivo em

  • 8/8/2019 PHP Magazine 005

    12/2812 - 5a Edio - PHP Magazine

    relao aplicao normal. Em termos de proteo decdigo, seguro dizer que impossvel recriar o exatocdigo-fonte original.

    Para utilizar a bcompiler, primeiro devemos instal-la. Alguns pr-requisitos devem ser satisfeitos em algunsambientes. No caso do sistema operacional Ubuntu, sernecessrio instalar algumas bibliotecas relacionadas

    compactao de arquivos (bzip2).# apt-get install libbz2-dev bzip2

    Aps isto, podemos proceder para a instalao dabcompilerem si. Para tal, utilizamos o binrio pecl, queacompanha a instalao do PHP. Para tal, digitamos oseguinte comando a partir do diretrio onde os binriosdo PHP esto instalados.

    # /bin/pecl install bcompiler-0.8

    Agora que temos a bcompiler instalada, teremos deescrever dois programas. O primeiro programa ir gerar

    os byte-codese o segundo ir interpret-los. Para distri-buir o programa ao usurio final, precisaremos distribuirapenas os byte-codese o programa interpretador.

    Este primeiro programa listado a seguir o codifica-dor, sua funo ler o contedo de nosso programa

    app.php, codific-lo e gravar o contedo codificadodentro de um arquivo chamado compiled.phpb, quealm de codificado ser tambm compactado. Para codi-ficar o arquivo, utilizamos a funo bcompiler_write_file(), alm de outras com o objetivo de criar o cabealho erodap do arquivo.

    Aps rodarmos o programa codificador, o arquivo compiled.phpb ser gerado. O contedo do arquivocodificado se parecer em muito com o trecho listado aseguir, ou seja, totalmente ilegvel.

    80>^C2.^U^P^PqAA^P^Q^E^E

  • 8/8/2019 PHP Magazine 005

    13/28PHP Magazine - 5a Edio - 13

    Em diversos momentos o foco principal atender atodos os requisitos definidos pelo cliente num prazo real-mente curto. Em algumas ocasies, por falta de planeja-mento ou porque realmente o desenvolvedor no se a-tm a detalhes, o projeto acaba deixando algumas lacu-nas de segurana abertas aps a publicao.

    Umas das falhas mais comuns e encontradas facil-mente no mudo Web a injeo de comandos SQL, co-nhecido como SQL Injection. Apresentaremos aqui o que essa falha e quais as conseqncias que a exploraoda falha pode nos trazer, bem como prticas para preve-ni-la.

    1. O que SQL Injection?

    Sql Injection um tipo de ataque que consiste nainjeo de uma consulta SQL via entrada de dados docliente para a aplicao. Um ataque bem sucedido podeler dados sigilosos de uma base de dados, modific-los(update/insert/delete), executar operaes de adminis-trao no banco de dados (ex: shutdown) e, em algunscasos, executar comandos no sistema operacional (ex:SQL Server xp_cmdshell). Um exemplo de execuo seri-a=> exec xp_cmdshell dir c:, O ataque tambm podefazer leitura (Mysql load_file) de arquivos do sistema.

    As principais conseqncias de uma injeo de SQLbem sucedidas podem ser:

    - Confidencialidade: banco de dados geralmenteguardam informaes confidenciais. A perda de confi-dencialidade um freqente problema com as vulnerabi-lidades de SQL Injection;

    - Autenticao: se a aplicao no faz os devidostratamentos nos dados que so inputados pelo usurioe j encaminha tais dados para a query do banco dedados para verificao de credenciais, possvel acessar

    o sistema sem conhecimento prvio de senha/usurio.-Autorizao: se alguma informao de autorizao

    est guardada em um banco de dados SQL, pode serpossvel mudar a informao por meio da explorao de

    uma vulnerabilidade de SQL Injection;

    - Integridade: assim como possvel ler informa-es confidenciais, tambm possvel fazer mudanasou at mesmo excluir informaes usando ataque deSQL Injection.

    2. Demonstrao de implementaes vul-nerveis a SQL Injection

    Tomaremos como exemplo de cdigo vulnervel umscript simples para fazer autenticao na aplicao apartir de um usurio e senha fornecidos por um cliente.Tambm ser apresentado outro script cuja principalfuno demonstrar ao usurio uma notcia, bem comoseu ttulo e autor. Essas informaes so recuperadas dabase de dados por meio de parmetros fornecidos viamtodos POSTou GET.

    Veja abaixo um exemplo de scriptvulmervel de au-tenticao (login):

  • 8/8/2019 PHP Magazine 005

    14/2814 - 5a Edio - PHP Magazine

    No nosso formulrio submeteremos as seguintes in-formaes conforme mostrado na tela abaixo:

    Figura 1 - Formulrio de Login

    Observe que no campo senha informamos a seguin-te instruo:

    OR 1=1

    Da forma como os dados foram submetidos, a querymontada dinamicamente no scriptacima, ficaria da se-guinte forma:

    SELECT * FROM users WHERElogin_user='qualquercoisa' AND pass-word_user=' ' or 1='1'

    Dessa maneira, a afirmao acima verdadeira, poisa consulta tenta encontrar algum registro se a condiocampo login_user for igual a qualquercoisa e pass-word_user= ou 1 for igual a 1.

    Da maneira como foi implementado o script, a auten-ticao acontece a partir do momento em que a consultaretorna alguma linha. Sendo assim, no caso mencionado,todas as linhas da tabela usersforam retornadas, o que,

    conseqentemente, nos permitiu a autenticao na apli-cao.

    Figura 2 - Autenticao realizada com sucesso

    Abaixo, damos um exemplo de cdigo do script vul-nervel de notcias:

    Na figura 3, nosso script funcionando com uma requi-

    sio normal:

    Figura 3 Cdigo de notcias em funcionamento normal

    Agora injetaremos a seguinte instruo SQL atravsdo parmetro ID, passado via GET para a aplicao, comobjetivo de fazer a unio com um segundo select, nostrazendo alguns campos da tabela userdo banco MyS-QL:

    UNION SELECT user,host,password FROM

    mysql.user LIMIT 1,1A figura 4 demonstra o resultado aps a insero da

    instruo SQL acima.

    Figura 4 Host, usurio e senha retornados

  • 8/8/2019 PHP Magazine 005

    15/28PHP Magazine - 5a Edio - 15

    A instruo injetada nos retornou os campos user,logine password, oriundos da base MySQL, que so osusurios vlidos que se conectam ao servidor de bancode dados. Explorando essa falha possvel obter os usu-rios e senhas do SGDB. Observe que nesse caso, a apli-cao vulnervel se conecta como root ao SGDB. Porisso possvel fazer a leitura da base de dados MySQL.Sendo assim, a senha criptografada passvel de ataque

    de fora bruta para recuper-la.Em uma outra situao, poderamos fazer uso da ba-

    se de dados information_schema (disponvel a partir daverso 5.0) para levantar informaes diversas, tais co-mo nome de bancos, tabelas, colunas entre outras coi-sas sobre as quais o usurio da aplicao conectado aoSGDB possui privilgios. Veja o exemplo:

    UNION SELECT table_name, table_schema,c o l u m n _ n a m e F R O M i n f o r m a -tion_schema.columns LIMIT 286,1

    Figura 5 No exemplo acima, a injeo de comandos nos re-torna o nome de uma tabela, nome de um banco e nome de

    um campo dessa tabela.

    Com a injeo da instruo acima, obtivemos comoresultado os campos table_name, table_schema, co-lumn_name do banco de dados information_schema.

    Verificamos que existe uma base de dados chamadahelpdesk, uma tabela chamada tickets_upe um campochamado tamanho_anexo. Um atacante poderia facil-mente montar o desenho de todos os bancos de dados

    em que o usurio da aplicao conecta do SGDB possuipermisso e, conseqentemente, ler as informaes con-tidas nessas bases aps o conhecimento do nome dastabelas e campos.

    3. Medidas preventivas

    H diversas formas de se prevenir contra a injeo decomandos SQL. Pode-se utilizar desde recursos da pr-pria engine PHP, como magic_quotes_gpc (em algunscasos), at o uso funes diversas como escape de da-dos (mysql_real_scape_string, addslashes), alm das

    prepared statements.

    3.1 Os recursos de escape

    Para aqueles que no conhecem, o Magic Quotes um recurso do PHP em que so inseridos automatica-mente caracteres de escape (\) em todos os dados envi-ados para um script PHP, via POST ou GET e Cookie.Com esta opo habilitada no php.ini, nosso scriptquefaz a autenticao de usurios estaria protegido, pois, ao

    inserir a instruo OR 1=1, o prprio PHP adicionaria \antes das aspas, fazendo com que a consulta enviada aobanco ficasse da seguinte forma:

    SELECT * FROM users WHERElogin_user='qualquercoisa' AND pass-word_user='\'or 1=\'1'

    Entretanto, como foi observado, h casos de injeode instrues em que um atacante no necessita de as-pas, como no exemplo do scriptde notcia e, sendo as-sim, funes de escape como o addslashes(), mys-ql_real_escape_strings()se mostrariam ineficientes paraconter tais inseres.

    preciso observar que conforme manual do PHP, orecurso Magic Quotestornou-se obsoleto e foi removidodo PHP 6.0. Confiar neste recurso extremamente norecomendado.

    3.2 Validando os dados recebidos

    Nos exemplos mostrados no h qualquer tipo devalidao dos dados enviados pelo cliente. A recomenda-

    o sempre validar os dados recebidos por um usurio,checando/convertendo seu tipo de acordo com o campoa ser consultado, delimitando o tamanho de acordo como campo para consulta e aplicando expresso regularsobre os mesmos.

    No scriptde notcias, o problema da injeo de ins-truo SQL seria resolvido facilmente apenas converten-do o valor de $_GET[id] para um inteiro, usando a fun-o intval(). No caso, o PHP ao converter 1 UNION ...retornaria apenas 1. No exemplo de autenticao, caso osistema de senhas da aplicao, por exemplo, permitisseapenas nmeros e letras, poderia-se utilizar expresso

    regular para checar de os dados fornecidos. Funescomo preg_match(), strlen(), intval(), intfloat(), dentreoutras, so bastante teis no auxlio da validao dosdados.

    3.2 Prepared statements (medida eficazcontra SQL Injection)

    Prepared statement a habilidade de definir umaconsulta uma vez e execut-la diversas vezes com dife-rentes parmetros. Sua principal funo separar a lgi-ca da consulta SQL dos dados recebidos para a monta-

    gem da query dinamicamente. Sendo assim, a nossaquerydo script de autenticao ficaria o como:

  • 8/8/2019 PHP Magazine 005

    16/2816 - 5a Edio - PHP Magazine

    SELECT * FROM users WHERE login_user=? ANDpassword_user=?

    Substitumos as variveis $login e $senha por duasinterrogaes. Ao enviar a query preparada para obanco de dados, ele fica no aguardo dos parmetrospara fazer a comparao (nesse caso) e tambm da ins-

    truo para executar aquery

    .Dessa forma, se envissemos algo como OR

    1=1, esse valor apenas seria comparado com o campopassword_userassim que fizssemos a ligao do pa-rmetro aguardado com a varivel $password, pois, algica da query j foi montada previamente e est ape-nas a espera de um parmetro. O recurso de preparedstatementspode ser utilizado em diversas consultas SQLcomo updates, inserts, deletes.

    Utilizada amplamente, a biblioteca MySQLDinfeliz-mente no possui esse tipo de recurso, entretanto, hdiversas outras bibliotecas que trabalham com preparedstatements, como a MySQLIe PDO. Abaixo, segue umexemplo do mesmo scriptutilizando MySQLI. Abaixo, umcdigo com instrues Prepared Statements.

    Consideraes finais

    inegvel o poder de destruio de um ataque bemsucedido de SQL Injection. Como visto, um atacante po-de burlar um sistema de login, obter dados de diversosdatabases do SGDB, bem como ler arquivos de sistema,

    descobrir senhas etc. A preveno no algo to com-plicado. As principais dicas so: sempre validar a entradade dados oriundas dos clientes e utilizar as preparedstatements. A utilizao de frameworks tambm podecontribuir para a reduo da vulnerabilidade, visto quealguns possuem mecanismos de filtragem de dados queutilizam diversos recursos, inclusive expresses regula-res. Aos programadores mais experientes fica a dica de

    revisarem seus cdigos, pois a correria do dia-a-dia fazcom que deixemos brechas s vezes imperceptveis e,segundo o Gartner, rgo bastante reconhecido na reade pesquisas tecnolgicas, 75% dos ataques bem suce-didos ocorrem via aplicaes Web.

    Referncias e links sugeridos[PHP] - http://www.php.net/manual/pt_BR/book.mysqli.phphttp://www.php.net/manual/pt_BR/book.pdo.php[OSWAP]http://www.owasp.org/index.php/SQL_injection

    [GARTNER]http://www.gartner.com/it/about_gartner.jsp

    Ismael Rocha- [email protected] em Sistemas de Informao pela Grupo

    Anhaguera, atua h mais de 5 anos na rea de de-senvolvimento de sistemas em diversas linguagens.

    Atualmente, trabalha com segurana da informao

    Criando Aplicaes Grficas com PHP

  • 8/8/2019 PHP Magazine 005

    17/28PHP Magazine - 5a Edio - 17

    O MVC (Model-View-Controller) um Padro de Ar-quitetura de Software criado com o objetivo de aumen-tar a produtividade, separando a lgica do negcio daapresentao com o uso de controladores e implemen-tando alguns Design Patterns (Padres de desenvolvi-mento de software). Sua maior vantagem a facilidadede manuteno do cdigo, pois oferece estrutura de di-retrios, arquivos e classes criadas.

    J o AJAX (Asynchronous Javascript And XML) umconjunto de tecnologias que tem como intuito tornarmais dinmica e interativa a camada de apresentao(View), fazendo com que o usurio tenha uma experin-cia muito melhor com o aplicativo.

    Se utilizados da maneira correta, PHP, MVC e AJAXpermitem o desenvolvimento de aplicaes com alta pro-dutividade, interatividade e qualidade.

    1. Design Patterns

    Design Patterns o termo em ingls para Padres deProjeto de Software, que nada mais do que uma pa-dronizao no desenvolvimento de software.

    Antes de tudo, preciso saber que um Design Pat-tern um conceito e no uma tecnologia. Sendo assim,no est ligado obrigatoriamente com nenhuma lingua-gem de programao ou frameworkde desenvolvimento.

    Os Design Patternssurgiram com a necessidade dosdesenvolvedores de resolver problemas de maneira efi-caz. Christoper Alexander estabeleceu na dcada de 70que os padres de projeto devem ter como objetivo re-solver um problema especfico e, para isso, devem con-ter um nome, um exemplo, um contexto, um problema euma soluo.

    Entre os padres mais utilizados no desenvolvimentode software atualmente esto o Factory, com o objetivode centralizar a criao de objetos, e o Singleton, quefaz com que uma classe tenha somente uma instnciaativa. J o Strategyencapsula algoritmos e os represen-ta atravs de uma interface. Outro padro interessante

    o TemplateMethod, que define uma estrutura abstratade classes com funcionamento parecido.

    O MVC vai alm do conceito de DesignPatterns, poisdefine padres para a arquitetura do software, como

    veremos nas prximas sees.

    2. O que MVC?

    Antigamente as aplicaes eram monolticas, ou seja,

    no havia separao em camadas no desenvolvimento.Com o surgimento de linguagens de programao orien-tadas a Objetos, como C# e Java, surgiu tambm umanova maneira de se desenvolver, separando em umacamada especfica o cdigo relativo persistncia. Comisso, um padro antigo se popularizou, principalmentepor ter sido implementado em alguns frameworks.

    Esse padro o MVC, que foi descrito pela primeiravez em 1979 por Trygve Reenskaug nos laboratrios daXerox, utilizando SmallTalk.

    MVC a sigla de Model View Controller, onde temosuma camada denominada Modelo, que so as regras denegcio do sistema, a camada da Viso, que a interfa-ce entre usurio e o sistema, e os Controladores, queso utilizados para controlar o fluxo da aplicao.

    Com o objetivo de separar as camadas, o MVC temcomo resultado um cdigo extremamente organizado,facilitando o desenvolvimento e a manuteno de siste-mas.

    Para que o MVC seja implementado necessria autilizao de uma linguagem de programao com su-porte Orientao a Objetos. Portanto, com o melhorsuporte do PHP 5 em relao Orientao a Objetos,

    trabalhar com PHP 5 e MVC uma tarefa simples e efi-caz.

    2.1. Vantagens de utilizar MVC

    Ao desenvolver utilizando MVC, h vrias vantagensem relao ao modelo estruturado.

    - Reaproveitamento de cdigo

    Uma das maiores vantagens da Orientao a Objetos o reaproveitamento de cdigo, j que ao modularizarso criadas classes e funes que podem ser utilizadas

    em vrias partes da aplicao.- Facilidade de manuteno

    Com uma boa estrutura de diretrios e arquivos rela-tivamente pequenos, encontrar um trecho de cdigo

    arquitetura

    Desenvolvendo em trs camadas

    com PHP, MVC e AJAXcom PHP, MVC e AJAXcom PHP, MVC e AJAX

    por Almir Neto e Otvio Calaa

    Neste artigo, apresenta-se o conceito de desenvolvimento em trs camadas com PHP.Para tal, ser demonstrada a metodologia do MVC e sua integrao com AJAX.

  • 8/8/2019 PHP Magazine 005

    18/2818 - 5a Edio - PHP Magazine

    para alteraes se torna uma tarefa simples.

    - Integrao de equipes e/ou diviso de tarefas

    Cada integrante da equipe pode trabalhar em umacamada especfica. Por exemplo, um designer pode fazera camada de apresentao, enquanto programadorestrabalham nos controladores e regras de negcio.

    - Camada de Persistncia independenteUtilizando MVC, a aplicao no fica dependente de

    um banco de dados, pois a comunicao entre PHP e BD feita em uma camada especfica. A alterao do Bancode Dados utilizado pode ser feita sem afetar outras par-tes da aplicao. Alm disso, h a possibilidade da utili-zao de uma biblioteca de BD para que a aplicao setorne portvel a vrios bancos.

    - Implementao de segurana

    Uma grande vantagem de utilizar controladores aimplementao de segurana, j que todo o fluxo da

    aplicao inicia e termina em um controlador. Alm dis-so, h outras partes do sistema na qual a segurana po-de ser feita.

    - Facilidade na alterao da interface da aplicao

    Para alterar a interface da aplicao no necessriorefazer o sistema, basta aplicar as alteraes na camadade viso. Para facilitar ainda mais, pode ser implementa-da alguma biblioteca de templates.

    Alm disso, h outras vantagens como a padroniza-o do cdigo e o aumento da produtividade pela veloci-dade do desenvolvimento, entre outros pontos positivos.

    2.1. Frameworks que implementam MVC

    CakePHP

    O CakePHP um frameworkde desenvolvimento desoftware que utiliza PHP e proporciona uma extensa ar-quitetura para o desenvolvimento de sistemas com velo-cidade. Ele utiliza alguns design patterns como MVC eORM. O objetivo do CakePHP diminuir o custo do de-senvolvimento ajudando os desenvolvedores a escrevercdigos menores.

    -> Verso Estvel: 1.1.19.6305-> Gratuito

    -> Link: http://www.cakephp.org/

    CodeIgniter

    O CodeIgniter um framework feito para desenvol-vedores que necessitam de uma ferramenta simples eelegante para desenvolver aplicaes Web completas.Uma das maiores vantagens de utiliz-lo a alta perfor-mance que ele proporciona.

    -> Verso Estvel: 1.6.1

    -> Gratuito

    -> Link: http://www.codeigniter.com

    PHP.MVC

    O PHP.MVC foi desenvolvido com o objetivo principalde implementar o MVC com PHP utilizando um controla-dor principal. Teve como base o framework Jakarta S-truts, inclusive implementando vrias funcionalidades doStruts, como utilizar XML em sua configurao.

    -> Verso Estvel: 1.0

    -> Gratuito

    -> Link: http://www.phpmvc.net/

    Symphony

    O Symphony um framework de desenvolvimentoem PHP que proporciona uma arquitetura, componentese ferramentas para desenvolvedores construir aplicaesWeb robustas e complexas mais rapidamente. O Sym-

    phonyutiliza boas prticas de desenvolvimento Web in-tegradas com bibliotecas de terceiros.

    -> Verso Estvel: 1.1

    -> Gratuito

    -> Link: http://www.symfony-project.org/

    Zend Framework

    Desenvolvido pela empresa criadora do PHP, o ZendFramework baseado na simplicidade, boas prticas do

    desenvolvimento orientado objetos e conta com umabase de cdigo fortemente testado. Tem como objetivosdesenvolver sistemas seguros, confiveis e modernos.

    -> Verso Estvel: 1.5.1

    -> Gratuito

    -> Link: http://framework.zend.com/

    PRADO

    O PRADO um frameworkbaseado em componentespara o desenvolvimento de aplicaes Web com PHP.

    PRADO a sigla para PHP RapidApplication Develop-mentObject-oriented, e conta com uma rica documenta-o e uma grande comunidade.

    -> Verso Estvel: 3.1.1

    -> Gratuito

    -> Link: http://www.pradosoft.com/

    3. Model

    Podemos dizer que a camada Model o corao daaplicao. nela que est a lgica da aplicao, respon-svel pelo que a mesma ir realizar. Nesta camada osdados so manipulados e armazenados. Para facilitarainda mais, esta camada separada em outras trs par-

  • 8/8/2019 PHP Magazine 005

    19/28PHP Magazine - 5a Edio - 19

    tes: A Entidade, que chamamos de Bean, a camada dePersistncia, chamada de DAO e os arquivos de regrasde negcio, que so as Actions. Veremos a seguir cadauma delas.

    3.1. Bean

    Implementando um conceito muito utilizado em Java,os JavaBeans, temos as entidades encapsuladas. A defi-nio de Bean seria um componente de software quepode ser reutilizado vrias vezes. So utilizados paraencapsular vrios atributos em um objeto. Na prticateremos um Beanpara cada entidade do sistema.

    A estrutura de um Bean bastante simples, come-ando com a declarao da classe, que tem o nome daentidade, seguido da declarao dos atributos com omodificador de acesso private, e os mtodos setters egetters. Para que a aplicao obtenha maior segurana,deve ser implementado o conceito de Encapsulamento.

    Com isso, os atributos no podem ser acessados direta-mente, j que esto declarados como private, podendoser acessados somente pelos setterse getters. Um set-ter um mtodo que segue o padro setAtributo(), eserve para definir o valor de um atributo. J o getterum mtodo que segue o padro getAtributo () e servepara obter o valor de um atributo, sempre que for ne-cessrio utilizar um atributo em um sistema, ser esse omtodo utilizado.

    Qualquer validao ou verificao a ser feita em umatributo deve ser implementada nos mtodos setters egetters. a que questes de segurana devem ser im-

    plementadas, como forar um atributo a ter um determi-nado tipo, evitando SQL injection, por exemplo.

    Segue um exemplo de um Bean.

    Figura 1 Exemplo de Bean

    3.2. DAO

    DAO a sigla de Data Access Object, que pode sertraduzido como Objeto de Acesso a Dados. Ele um ob-

    jeto que prov uma interface abstrata para persistnciade dados, ou seja, um conjunto de funes que fazema comunicao com os dados, seja em um banco de da-dos, um arquivo XML ou qualquer outra forma de arma-

    zenamento.Para utilizar um SGBD, por exemplo, as consultas

    SQL sero escritas no DAO, ou ento uma biblioteca depersistncia pode ser implementada nessa camada parafacilitar essa comunicao.

    Uma das grandes vantagens de se utilizar uma cama-da de persistncia independente a portabilidade debanco de dados que o DAO oferece. Para fazer uma mi-grao de banco de dados, ao invs de alterar toda aaplicao nos locais onde h comunicao com o banco,basta fazer as alteraes nesta camada. Se uma bibliote-

    ca de persistncia estiver sendo utilizada, essa alteraofica ainda mais simples, j que apenas o arquivo de co-nexo precisa ser alterado. Entre as bibliotecas mais uti-lizadas esto a EzPDO, o Propel e o PE-

    AR:DB_DataObject.

    Aps implementado, o DAO pode ser utilizado sempreque for necessria a persistncia de dados.

    Segue um exemplo de DAO.

  • 8/8/2019 PHP Magazine 005

    20/2820 - 5a Edio - PHP Magazine

    cdigo que ser executado.

    Esses arquivos utilizam o Beane o DAO para realizarpersistncia de dados, alm de disponibilizar dados paraa camada de Viso.

    Segue um exemplo de um arquivo de Ao.

    Figura 3 Exemplo deAction

    4. View

    A View, ou camada de viso, a parte da aplicaoque comunica e interage com o usurio final, ou seja,uma interface com ele. nela que so implementadas ausabilidade, a interatividade e o layoutvisual, incluindo alinguagem de estilo (CSS), a linguagem de marcao(HTML) e a linguagem de programao cliente

    (JavaScript).Quando o Model termina de fazer o processamento

    dos dados que sero apresentados ao usurio, envia-osao controllerjuntamente com qual viewser usada. Comisso, o controller joga o fluxo para a viewque transfor-ma esses dados em informao para o usurio.

    notvel que dessa maneira a camada de viso qua-se no contm cdigo PHP, apenas as variveis geradasno Modele algum lao de repetio, em listagens. Maspodemos abstrair ainda mais a linguagem PHP da cama-da de viso utilizando templates.

    Os templates so modelos, sem contedo, que pos-suem a apresentao visual de aplicaes dinmicas.Para suprir a pequena necessidade de linguagem novisual (PHP) da view, muitos sistemas de templatesutili-zam uma linguagem prpria para manipular a exibiodos dados provindos do servidor. Como exemplo, pode-se citar o Smarty, o sistema de templatesmais tradicio-nal para PHP.

    Independente das implementaes contidas na view, importante observarmos que com o MVC a camada deviso fica to bem separada que pode ser desenvolvidainteiramente por um designer, que no entende de PHP.

    Ou, ainda, podemos desenvolver duas camadas de visopara uma mesma aplicao: a Web e a Desktop(utilizando PHP-GTK), tornando a aplicao ainda maisportvel.

    A boa usabilidade, implementada nessa camada, essencial para o sucesso da aplicao. De nada adiantater uma aplicao com um alto nvel de processamento,se a apresentao no for muito usual e o usurio noconseguir utiliz-la. Para uma boa usabilidade devemoster muita interatividade e transparncia para o usurio,que podem ser proporcionadas pelo AJAX.

    4.1 AJAX

    O AJAX o uso em conjunto de vrias tecnologiaspromovendo uma tcnica de requisio assncrona muitodifundida com a WEB 2.0. Antes de entender o que

    jax, temos que compreender como funciona a requisi-o assncrona em pginas WEB.

    Temos por requisio assncrona tudo aquilo que re-quisita dados do servidor sem a necessidade de toda apgina ser recarregada. Applet, Flashe Iframes so e-xemplos de tecnologias que fazem requisio assncrona.

    Para entender melhor esse conceito, observe os diagra-mas abaixo.

    Figura 4 Fluxo na Web sem requisio assncrona

    Figura 5 Fluxo na Web com requisio assncrona

    Ao contrrio do que feito normalmente, quandoutilizamos requisio assncrona, uma mesma pginaconsegue fazer vrias requisies. Isso nos fornece di-versas vantagens, como a reduo do trfego na rede e

    a maior transparncia para o usurio, tornando o siste-ma semelhante a uma aplicao Desktop.

    No AJAX a requisio feita atravs do Javascriptpara um XML que se encontra no servidor. Quando usa-

  • 8/8/2019 PHP Magazine 005

    21/28PHP Magazine - 5a Edio - 21

    mos AJAX com PHP, o XML formado pelo PHP dinami-camente atravs de algum parmetro que o Javascriptpassou na requisio. Integrando o AJAX com MVC tere-mos dois tipos de view: a viewque solicita arquivos XMLpara o servidor e as views que constroem esses ar-quivos.

    Para compreender como a requisio assncrona com

    Javascript funciona, devemos entender os objetos XM-LHttpRequest, responsveis por ela. Infelizmente esseobjeto ainda no est padronizado, sendo possvel queem navegadores diferentes ele esteja em diferentes es-copos. Para sanar essa incompatibilidade o seguinte c-digo pode ser usado:

    try

    {

    // Firefox, Opera 8.0+, Safari, etc...

    xhr = new XMLHttpRequest();

    }

    catch (e)

    {// Internet Explorer

    try

    {

    xhr = new ActiveXObject("Msxml2.XMLHTTP");

    }

    catch (e)

    {

    xhr = new ActiveXObject

    ("Microsoft.XMLHTTP");

    }

    }

    Figura 6 Javascriptpara instanciar o objeto XMLHttpRequest

    Dentre os mtodos do objeto XMLHttpRequest osmais importantes so o open, responsvel por configuraro metodo e a url da requisio e o send, responsvel porenviar a requisio. H tambem alguns atributos quemeressem ser comentados: readyState, que representao estado atual da requisio (variando de 0 noinicializada 4 concluda); responseXML, a respostaem XML; responseText, a resposta em texto; status, ocdigo do status da URL requisitada e o eventoonreadystatechange, que chamado em cada mudanade estado do objeto. Abaixo, o exemplo mais bsico defuno para a requisio assncrona:

    function ajax(url, metodo, parametros) {

    xhr.onreadystatechange = function() {

    var divId = 'conteudo';

    if (xhr.readyState==4 && xhr.status==200)

    {

    var div = document.getElementById

    (divId);

    var texto = xhr.responseText;

    div.innerHTML = texto;

    }

    }

    xhr.open(metodo, url, true);

    xhr.send(parametros);

    }

    //Exemplo de uso

    ajax("pagina.php", "GET",

    "categoria=5&produto=1");

    Figura 7 Exemplo de funo JavaScriptpara a requisio.

    Observe no cdigo acima que ao evento onreadysta-techange atribuda uma funo que verifica se a requi-sio foi concluda e se a URL vlida. Se sim, coloca ocontedo da requisio numa tag com id igual a

    'conteudo'. Aps definir o manipulador do evento, a fun-o ajaxconfigura a requisio com o mtodo openerequisita com o mtodo send, passando os parmetros.

    Apesar de AJAX utilizar XML, comum chamaremde AJAX toda requisio assncrona feita atravs doJavaScript, que pode ainda retornar HTML, Texto puro,Scripts ou dados em JSON. O exemplo trata um retornoem HTML ou Texto puro que o mais simples. A res-posta em script uma stringque pode ser transformadaem cdigo JavaScript atravs da funo eval(). JSON(JavaScript Object Notation) um formato para serializa-o de objetos em JavaScript. O PHP 5 possui nativa-

    mente funes que serializam/deserializam objetos deleem JSON (json_encode,json_decode). Com isso fcilpassar um objeto do PHP para o JavaScript de formabem simples, utilizando o mnimo possvel de banda.JSON tm se tornado uma excelente alternativa ao XMLno AJAX.

    Para facilitar o uso do AJAX e possibilitar outros re-cursos da WEB 2.0, podemos utilizar bibliotecas como ojQuery, o MooToolsou o Prototype, ou frameworks co-mo o Dojo, o Ricoou o extJS.

    5. Controller

    O Controller o controlador da aplicao, ele o res-ponsvel por controlar o fluxo da aplicao e pode tam-bm implementar segurana.

    Todas as requisies feitas ao sistema so iniciadaspelo controlador. O usurio acessa o controlador pelaURL passando parmetros, que sero utilizados paradeterminar o fluxo da aplicao.

    Alm disso, o fluxo da aplicao sempre ser encerra-do pelo controlador, por isso, ele se torna bastante tilpara implementar segurana, como verificaes de nveisde acesso e gravao de logsde acesso. Pode ser utiliza-

    do tambm para abrir e fechar uma conexo ao bancode dados, por exemplo.

    Figura 8 Exemplo de Controlador

  • 8/8/2019 PHP Magazine 005

    22/2822 - 5a Edio - PHP Magazine

    6. Estrutura de Diretrios

    Na raiz da aplicao situa-se o controlador principal.Para cada entidade cria-se um diretrio com o nome domesmo. Dentro de cada entidade, h um arquivo com onome da entidade, que o arquivo Bean, e o arquivoDAO. Alm disso, h um diretrioActions, onde se locali-zam os arquivos de Ao, e por fim o diretrio view, on-

    de so armazenados os arquivos de apresentao, quepor padro tem o prefixo frm.

    Figura 9 Exemplo de estrutura de diretrios

    7. Fluxo da Aplicao

    Na figura seguinte, tem-se o fluxo completo dentre ascamadas na execuo normal da aplicao utilizandoMVC.

    Consideraes Finais

    Quando desenvolvemos para Web, temos um desafiomaior em tornar a aplicao interativa e com o cdigoorganizado, sem misturar Linguagem de Banco de Da-dos, Linguagem de Programao e Linguagem de Marca-o. Neste artigo mostramos uma maneira de usar con-ceitos e padres que se do muito bem sozinhos e me-

    lhor ainda juntos: MVC e AJAX com PHP. Detalhamos onecessrio para criar uma aplicao modular que seja defcil manuteno, agradvel e interativa para o usurio,seguindo os padres WEB 2.0.

    Referncias e links sugeridos[PEAR] http://pear.php.net/[jQuery] http://jquery.com/[MooTools] http://mootools.net/[prototype] http://www.prototypejs.org/[dojo] http://dojotoolkit.org/[Rico] http://openrico.org/

    [extJS] http://extjs.com/[XMLHttpRequest] www.w3.org/TR/XMLHttpRequest[GOPHP] http://www.gophp.com.br[Wikipdia] http://www.wikipedia.org.br

    Almir Neto - [email protected] Almir Neto desenvolvedor da HP Transportes e um entusiasta do PHP + MVC. Foi palestrante noPHP Conference Brasil 2007 alm de ter ministradopalestras e mini-cursos no III FGSL e IV FLISOL-GO.

    Otvio Calaa Xavier- [email protected] do Desenvolvimento WEB 2.0, do Softwa-re Livre e de Padres para Web, Otvio Calaa Xavi-er trabalha como analista desenvolvedor na Cmarade Dirigentes Lojistas de Goinia. Ministrou o mini-curso "PHP Orientado a Objetos com AJAX" no IVFLISOL-GO e o "Introduo Google Maps API" noFLISOL-DF 2008.

    Almir e Otvio tm projetos em comum e j minis-tram palestras e mini-cursos em conjunto h algumtempo. Como exemplo, podemos citar o mini-curso"Introduo ao MVC com PHP 5 e Ajax" no ExecutiveIT Meeting ( IV FGSL ).

  • 8/8/2019 PHP Magazine 005

    23/28PHP Magazine - 5a Edio - 23

    edio 01 - janeiro/2007 (lanamento)Edio especial de lanamento apresentando a revista comunidade. Os artigos abor-dam temas relacionados a CMS's, Design Patterns, integrao com SOA e sesses. No

    final, uma entrevista com Cristian Pedroso.

    Edies anteriores

    edio 02 - maro/2007Segunda edio com um acervo maior de artigos. Nesta edio so apresentados al-guns nmeros e comentrios da repercusso do projeto. Os artigos abordam desdeCMS, camadas de persistncia at uma avaliao de frameworks. Ao final, Via6 e Rec6so apresentados como exemplos de cases de sucesso PHP.

    edio 03 - junho/2007 A terceira edio surge com um pequeno atraso devido cobertura de dois eventos.Nesta edio so apresentados alguns nmeros e comentrios da repercusso do 1 PHPRoad Show e do FISL, em sua 8a edio. Os artigos abordam desde LCMS, segurana,sugestes de codificao at uma ferramenta para desenvolvimento de projetos PHP. Aequipe apresenta um pequeno tour em trs IDEs conhecidas da comunidade.

    edio 04 - maro/2008Nesta edio, selecionamos 7 artigos para leitores de todos os nveis. Os artigos abor-dam documentao de cdigo fonte, recursos de linha de comando, imagens e gera-o de planilhas em excel. Na categoria segurana, artigos sobre autenticao de web-mail e SMTP Injection.

    www.phpmagazine.org.br

  • 8/8/2019 PHP Magazine 005

    24/2824 - 5a Edio - PHP Magazine

    eventos

    Os nmeros do

    FISL 9.0FISL 9.0FISL 9.0Nesta seo apresentamos alguns nmeros do frum que a cada ano obtm mais ex-presso dentre as diversas comunidades de tecnologia.

    O evento reuniu mais de 7,4 mil participantes de 21pases no Centro de Eventos da PUCRS, o maior pblicodesde 2000, quando foi realizado o primeiro fisl. Nos trs

    dias do evento houve debates, palestras, troca de infor-maes e experincias, entre grupos de usurios, desen-volvedores, empresas pblicas e privadas que compare-ceram como participantes, expositores ou patrocinado-res. Foram 257 palestras, com nomes nacionais e inter-nacionais, que lotaram todas as oito salas destinadas aosencontros.

    Para a coordenao do fisl9.0, esta edio com pbli-co recorde mostra a importncia que o software livrevem conquistando no mundo todo e como o comparti-lhamento de informaes pode beneficiar a toda a socie-dade. "Nosso desafio agora ser organizar o evento do

    ano que vem, quando pretendemos marcar de formaainda mais forte a presena do software livre na vida daspessoas, em funo dos 10 anos do fisl", diz Sady Jac-ques, coordenador geral do Frum.

    A meta da Associao Software Livre.Org, organiza-dora do fisl, chegar a 10 mil participantes em 2009."Sabemos que um grande desafio, mas estamos nospreparando para isso", afirma Jacques.

    Alm do pblico recorde, o fisl9.0 teve a participaode empresas como Provncia Marista; UOL; Terra; Tele-fnica; Google; Globo.com; Intel; Sun microsystems;

    Yahoo Brasil; Comit Gestor da Internet no Brasil (CGI);Ncleo de Informao e Coordenao do Ponto br(NIC.br); Companhia de Processamento de Dados doMunicpio de Porto Alegre (PROCEMPA); Companhia deInformtica do Paran (CELEPAR); Empresa de Tecnolo-gia e Informaes da Previdncia Social (DATAPREV);Servio de Processamento de Dados (SERPRO); CaixaEconmica Federal; Banco do Brasil; Secretaria de Edu-cao a Distncia (SEED); Ministrio da Cultura; Minist-rio da Cincia e Tecnologia; Ministrio da Educao; Mi-nistrio do Planejamento, Oramento e Gesto; Propus;Locaweb; Servio Nacional de Aprendizagem Comercial(SENAC); Diginet; iSafe; Kroma Informtica; Logins; Pro-Desk; ArgoHost.net; Brasil Telecom; Powerlogic; Minua-no; Cobra Tecnologia; Casa Brasil; Petrobrs; Correios;Ministrios das Comunicaes; Ministrio da Sade; Ins-tituto Nacional de Tecnologia da Informao (ITI); Go-

    verno do Paran; Companhia de Processamento de Da-dos do Estado do Rio Grande do Sul (PROCERGS); Sindi-cato das Empresas de Informtica do Rio Grande do Sul(SEPRORGS);

    O fisl contou com apoio das empresas: Baguete; ARede; Instituto Nokia de Tecnologia (INdT); Associaodos Jovens Empresrios de Porto Alegre (AJE); Sindicatodos Bancrios; Instituto Projetos Pesquisas; Tangalo-mango; e Centro de Processamento de Dados (CPD) daUniversidade Federal do RS (UFRGS).Participaram da Mostra de Solues as empresas: SolisCooperativa de Solues Livres; Livraria Tempo Real In-formtica e Negcios; ZOPING; Trolltech ASA; Moradia eCidadania; Education Technolog; Red Hat Brasil; Socie-dade de Educao Ritter dos Reis; OpenS TecnologiaLtda; Escola Alcides Maya; Linux Magazine; Unicamp;Universidade Federal de Pernambuco; ThreePointsWeb;NetScience; ParanaCidade; BrOffice.org; LM2 Consulting;PostgreSQL; DBSeller Servios de Informtica; Ory So-luctions Group; FAURGS; Centro de Empreendimentosdo Instituto de Informtica da UFRGS; CONEXUM; DFL;SOL7; Laboratrio de Estudos Cognitivos (LEC); e Pro-

    jeto Germinar.

    Vamos aos nmeros

    Total de participantes: 7.417 Pases: 21 (Alemanha, Argentina, Austrlia,

    Blgica, Bolvia, Brasil, Canad, Chile, Cuba,Espanha, Estados Unidos, Finlndia, Frana,Holanda, India, Inglaterra, Noruega, Paraguai,Portugal, Sua, Uruguai)

    Todos os estados brasileiros foram representa-dos no fisl.

    Perfil dos participantes: 24% so estudantes e63% so profissionais e empresrios de TI;

    Patrocinadores: 41

    Mostra de Solues: 28

  • 8/8/2019 PHP Magazine 005

    25/28PHP Magazine - 5a Edio - 25

    Apoiadores: 8

    Destes, 58 so expositores

    Submisses de propostas de palestras: 574

    Palestras realizadas: 257

    Palestrantes: 402

    Caravanas: 59 (vindas de 12 estados brasileiros e de 2outros pases Uruguai e Paraguai)

    Maior caravana: So Paulo, com 47 participan-tes

    Mais distante: Manaus ;

    Grupos de Usurios: 48 (vindos de 8 estados brasilei-ros e de outros 5 pases Paraguai, Argentina, Uruguai,Bolvia e Chile);

    Visitas a TV Software Livre: 3.175

    Trfego de upload da TV Software Livre: 70 Gb

    Trfego de download da TV Software Livre: 179 Gb

    Conexes: 19 mil simultneas

    Trfego de upload/download: 250 Gb

    Visitas ao site do fisl durante o evento: 12.159

    Arena de Programao Livre

    Fase Remota = 35 inscritos

    Qualifying = 32 presentes (8 equipes de 4participantes)

    Insanifying = 18 classificados (6 equipes de 3participantes)

    Fontehttp://fisl.softwarelivre.org/9.0/www/node/532

  • 8/8/2019 PHP Magazine 005

    26/2826 - 5a Edio - PHP Magazine

    Ao todo foram trs dias de evento que deixaram umdesejo de queremos mais em 2009. Muito bem organi-zada, as apresentaes foram divididas em 14 trilhas,com uma delas chamada Desenvolvimento: PHP, quecontou com 5 palestras de pessoas ilustres da comuni-dade PHP do Brasil e do exterior.

    Presente do incio ao fim, a equipe PHP Magazineno podia deixar de registrar as palestras de nosso inte-resse especfico. Agradecemos os autores pelo incenti-vo e colaborao para este resumo, bem como a cola-

    borao de Fernando Fischer e Ubiratan de Carvalho.Infelizmente, no conseguimos acompanhar a palestraDesenvolvendo portais com o Drupal: Estudo de casodos portais dos Democratas. Fica aqui o nosso pedidode desculpas. A seguir, um apanhado dos principaispontos abordados em cada apresentao.

    Large Scale PHP

    Autor: Rasmus Lerdorf

    Rasmus Lerdorf, que desenvolveu a primeira versoda linguagem de programao PHP, apresentou nesteFISL um pouco da histria do PHP, passando para a oti-mizao de scriptse do ambiente do servidor em geral epor ltimo focou em segurana, demonstrando de modoprtico um ataque de XSS.

    No estado vicioso de nosso trabalho acabamos nolembrando como as coisas comearam, reclamamos dafalta de padronizao das funes, da capacidade ouno da orientao a objetos, se deveriam ou no deixarde existir os alis para as funes... Imagine que oincio disso tudo foi l por 1994 ou 1995. Naquela pocaa realidade era outra: outro pblico com acesso a Inter-net, outros softwarespara acessar as pginas. A internetera texto e poucas responsabilidades com dinamicidade.

    Com o passar do tempo as exigncias aumentaram, alinguagem evoluiu muito e de modo descentralizado,dificultando vrias normatizaes e resultando em fun-

    es com as mais diversas responsabilidades. O incrvel que nem por isso a linguagem deixou de ser fcil. HojePHP o front-endde 80-90% das pginas da Internet.

    Com aplicaes grandes de alta responsabilidade,iniciam-se anlises antes inviveis, comea-se a pensarem otimizao mxima do script, em devolver o mnimopossvel de HTML para o cliente, em analisar em deta-lhes e medir os tempos do trfego HTTP e da respostado servidor, do processamento de cada binrio ou biblio-teca que estiver envolvida. Aplicaes de grande respon-

    sabilidade exigem cuidados muito especficos.Para ajudar-nos existe o YSlow, que um comple-

    mento para a extenso FireBug que roda no MozillaFirefox. O YSlow foi desenvolvido pela Yahoo! para facili-tar a anlise e, com isso, saber em que pondo agir bus-cando o melhor tempo de resposta.

    Precisamos de mudanas em nossos hbitos de pro-gramar. A simples substituio de require_once por

    require j representa uma melhora de performance,pois ser um processamento a menos. Por isso, tenhaum olhar clnico e faa da maneira mais simples possvel.Evite o uso de frameworksque tendem a ser grandes ecomplexos quando no so necessrios.

    Servios de alta responsabilidades ou apenas siste-mas complexos tendem a ter variveis em to grandenmero que em algum momento ficam incontrolveis eneste descontrole pode-se abrir uma brecha na seguran-a. Por isso, never click on a link! (nunca clique em umlink!), pois voc internauta no sabe o que processadono servidor e no seu navegador no momento daqueleclique. Na realidade no h como garantir a segurana.

    Quando se abre uma URL estamos sujeitos a scriptsque agem nos bugsdo nosso navegador. Estamos sujei-

    tos a sermos usados para propagar links maliciosos. Asoluo novamente simples: filtrar par garantir que osdados que estamos recebendo realmente so os queesperamos receber.

    review

    9 Frum de Software Livre e

    muito PHPmuito PHPmuito PHP

    Por Helton Ritter

    A linguagem de programao PHP marcou presena no ltimo Frum Internacional doSoftware Livre (FISL 9.0), entre os dias 17 e 19 de abril na PUC-RS, em Porto Alegre.Com diversos grupos de usurios e palestras sobre o assunto, o frum reuniu mais de7.000 pessoas, entre entusiastas, desenvolvedores, usurios, designers, expositores evoluntrios. E, como no poderia deixar de ser, a PHP Magazine esteve l e conferiutudo de perto para voc.

  • 8/8/2019 PHP Magazine 005

    27/28PHP Magazine - 5a Edio - 27

    Lio final: Faa o mais performtico que puder, ga-rantindo a integridade do sistema e o mximo de segu-rana para o usurio. Rasmus deixou os slides no se-guinte endereo: http://talks.php.net/show/fisl08 .

    Duro de Errar 5.0 - Tratamento, Controle

    e Configurao de erros em PHP 5Autor: Marcelio Leal

    Marcelio Leal trouxe um assunto que ningum querdeparar-se: os erros, as excees e os bugsem nossosprogramas PHP, junto a isso algumas configuraes emtodos do PHP para melhorar sua visualizao e geren-ciamento.

    Apresentou-nos os nossos direitos. O direito 0 dizque devemos ter a liberdade de errar e conseguir enten-der o erro. Nesse ponto comentou-se que o PHP muitobom, pois indica de forma clara qual foi o erro e ondeque ele ocorreu.

    No arquivo php.ini h algumas diretivas relaciona-das a erros. Tais diretivas devem ser diferenciadas emambiente de desenvolvimento, no ambiente de testes eno ambiente de produo. No ambiente de desenvolvi-mento mostra-se todos os erros, warnigse notices, almdas possveis funes que depreciaro e incompatibilida-des futuras. Temos assim uma riqueza de informaesque nos auxilia a fazer o cdigo da maneira mais perfeitapossvel. No ambiente de produo a recomendao no mostrar erros e guard-los em logs, ou trat-los porfunes especializadas.

    A customizao ainda depende da experincia do de-senvolvedor. Um desenvolvedor com mais experinciapode configurar para que vejam apenas os erros quelhes so interessantes. Essa uma flexibilidade do PHPque pode ser explorada.

    O bloco try/catch foi reforado, pois, embora sejade um uso muito simplificado, pouco aplicado na prti-ca. Sabemos que os erros da maneira original apresen-tam-se sem sentido algum para o usurio e, para piorar,pode se tornar at um problema de segurana, depen-dendo de como se apresenta o erro em ambiente de

    produo. Afinal, nada como poder reagir diante de umasituao de erro.

    H ainda a triger_error em que podemos criar errosem tempo de execuo, com mensagens claras(objetivas em relao ao sistema) e tratar com

    set_error_handler.

    Fica clara a necessidade de testar por diversas vezesas rotinas, ou melhor, usar o prprio computador paratestar a pgina. Nesse momento apresenta-se o phpUnite o Selenium, ambas ferramentas que permitem auto-matizar testes.

    Marcelio tambm disponibilizou os slides em http://marcelioleal.wordpress.com/2008/04/22/duro-de-errar-50/ .

    Prevenindo XSS: Execute apenas o SEUcdigo

    Autor: Er Galvo Abbott

    Um dos assuntos mais destacados no momento so

    ataques por XSS, ou seja, injeo de cdigos dentro denossa aplicao. Er Galvo Abbott, que j havia falandosobre segurana no FISL, este ano voltou a expor o as-sunto. Galvo tambm j publicou na 3 edio da PHPMagazine, no deixe de conferir Segurana no PHP Os6 requisitos mnimos.

    Ataques de XSS so tentativas de embutir, ou seja,de fazer nossa pgina executar cdigos (normalmenteJavaScript e HTML) de forma intrusiva, causando ou da-nos visuais ou, na pior hiptese, fazendo processar co-mandos invisveis ao usurio, mas que agem de modoobscuro.

    Novamente a soluo simples: garantir-se de queos dados que recebemos ou enviamos esto no formatoque esperamos que estejam. Tal regra vale para dadosvindos por $_COOKIE, $_SESSION, $_POST, $_GET ou$_REQUEST. Tambm devem ser tratados os dados ori-ginados do banco de dados e que chegam at nossaaplicao

    Costumamos nos preocupar com os dados que rece-bemos por parte do usurio, mas acabamos esquecendode tratar os dados que so inseridos em nossa aplicaovindos do banco de dados e simplesmente exibidos. Seesses dados tiverem scripts, eles provavelmente seroexecutados e podem comprometer o sistema ou dados.

    Segundo Galvo, a incapacidade tcnica no o ni-co problema. O que ocorre que o erro de segurana identificado, mas no corrigido por falta de tempo e pormenosprezarmos os danos que podem ser causados.Cabe nesse momento um pouco mais de compromissonos trabalhos j finalizados por parte do desenvolvedor.Isso no especifico para PHP, pois o problema gen-rico.

    Os slides esto no site do autor: http://www.galvao.eti.br em keynotes.

    Implementando Enterprise Patterns emPHP

    Autor: Pablo Dall'Oglio

    Pablo DallOglio brincou que contava sua idade pelaquantidade de participaes na FISL e falou de um as-sunto que muito nos interessa: os patternsde acesso adados. Em sua palestra foram comentados e demonstra-dos os principais modelos.

    A atualidade corporativa requer que o desenvolvedorconhea alguns nomes que cercam a rea. Conhecimen-to importante, sem dvidas, pela objetividade que pro-porciona, uma vez que a regra de negcio no precisa

  • 8/8/2019 PHP Magazine 005

    28/28

    ser explicada, basta ser denominada, por j ser um pa-dro. Padro este que, por vezes, usamos e no sabe-mos.

    De forma simplificada, um padro criado quandouma determinada tarefa ou modo de resolv-la usadopor mais de uma vez. Objetiva-se, ento, que seja apli-cvel sempre que aquela situao ocorrer. Design pat-

    ternsno inveno da rea de informtica.Os padres demonstrados favorecem o uso do mode-

    lo MVC, separando a persistncia da camada visual e doscontroles. No caso usamos bancos de dados relacionais.Ento, como fazer para que um padro orientado a obje-to seja usado em um banco de dados que no seja? Asoluo colocar nas classes as regras de negcio e se-parar at nas classes de persistncia o que diz respeitodireto ao banco de dados e o que so regras. Neste mo-mento entra o conceito de gateways.

    Os patterns apresentados foram: Table Data Gate-way, Row Data Gateway, Active Record, Layer Supertypee o Repository Pattern. Os padres foram apresentadospartindo-se das premissas mais simples at se chegar

    em um modelo aplicado que realmente prov flexibilida-de e organizao do cdigo-fonte.

    Os slides esto disponveis no site do Pablo PabloDallOglio: http://www.pablo.blog.br/talks. Recomenda-se a leitura do livro do autor: PHP Programando comOrientao a Objetos.

    Concluses

    Com a migrao de softwares desktop para internet,tentando aproveitar-se do ambiente colaborativo, hcada vez mais aplicaes com necessidade de alta per-formance, escalabilidade, disponibilidade e segurana. Osite virou aplicao e a rede de pesquisa da ARPANETvirou uma oportunidade para negcios.

    Em geral, as palestras do frum na rea de PHP notrouxeram novidades, mas todas elas focaram na quali-dade. Que no prximo FISL possamos ver os resultados

    destes esforos!

    Helton Eduardo Ritter - [email protected] em Sistemas de Informao pela Sociedade Educacional Trs de Maio SETREM, pela qual tambm Tcnico em informtica formado em 2006 e funcionrio desde julho do mesmo ano.Moderador PHP do frum ScriptBrasil, Helton tambm colunista do Imasters e faz trabalhos como free-lancer.

    Sexta edio!Participe da sexta edio da PHP Magazine.Visite nosso portal e veja as informaes pa-ra submisso de artigos para a revista. Noesquea o deadline: 25/09/2008.

    Visite nosso Portal

    www.phpmagazine.org.br