Você está na página 1de 28

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.

com>

PHP Magazine - 5a Edio -

sumrio

No esquecer Sombra no fundo Da imagem

PHP-GTK SQL Injection Arquitetura

editorial
Apresentao Equipe Caixa de Entrada Chamadas

artigos
PHP e o Conhecimento Cientfico ao redor do mundo
por Leandro Schwarz

Protegendo cdigos em PHP-GTK


por Pablo Dall'Oglio

SQL Injection em PHP: vulnerabilidades e preveno


por Ismael Rocha

Desenvolvendo em trs camadas com PHP, MVC e AJAX


por Almir Neto e Otvio Calaa

Os nmeros do FISL 9.0 9 Frum de Software Livre e muito PHP


por Helton Ritter

2 - 5a Edio - PHP Magazine

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

apresentao
Prezado leitor, A equipe da PHP Magazine inicia esta edio pedindo desculpas pela demora na publicao deste exemplar. Os participantes da produo da revista so voluntrios e, portanto, nem sempre dispem de tempo livre para trabalhar em prol da comunidade. Nossa 5 edio vem acompanhada de uma grande novidade. Graas ao apoio do Instituto de Desenvolvimento 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 da revista, 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 como aplicar segurana em seus aplicativos. Ismael Rocha tambm participa com um artigo sobre segurana, com vulnerabilidades e preveno de SQL Injection. Almir Neto e Otvio Calaa participaram com um artigo sobre arquitetura em trs camadas. 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 que nosso 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 atividades da revista.

Tenha uma boa leitura! Aguardamos suas sugestes e crticas. Equipe da PHP Magazine

Editores Flvio Zacharias Fagundes, zach@phpmagazine.org.br Ricardo Arago, ricardoaragao@phpmagazine.org.br Administrao Flvio Zacharias Fagundes, zach@phpmagazine.org.br Ricardo Arago, ricardoaragao@phpmagazine.org.br Comercial Flvio Zacharias Fagundes Ricardo Arago Projeto grfico Flvio Zacharias Fagundes Ricardo Arago Reviso tcnica Ricardo Arago da Silva Flvio Zacharias Fagundes Helton Ritter Reviso - Lngua Portuguesa Camilla Carvalho, camilla@phpmagazine.org.br

www.phpmagazine.org.br
Comercial comercial@phpmagazine.org.br Contato/Suporte contato@phpmagazine.org.br Marketing mkt@phpmagazine.org.br

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

PHP Magazine - 5a Edio - 3

caixa de entrada
Submisso de artigo
Primeiramente gostaria de parabeniz-los pelo excelente trabalho e manifestar meu total apoio. Sou desenvolvedor PHP e trabalho em uma instituio de segurana/ insegurana da informao. Constru um manual de polticas e prticas de programao segura em PHP (que tambm serve para outras linguagens voltadas pra Web) e gostaria de divulgar o meu trabalho. Como extenso, pois possui exemplos prticos detalhados e informaes sobre as diversas vulnerabilidades, sugiro uma coluna na PHP Magazine sobre programao segura, onde a cada edio seria publicado um artigo tratando de uma determinada vulnerabilidade. Ismael Rocha :: Braslia - DF
Recebemos este e-mail h algum tempo e trocamos vrias mensagens com o leitor. Ismael demonstrou-se realmente interessado, desenvolvendo um tema e, aps alguns feedbacks, apresentamos seu artigo nesta edio. Nosso muito obrigado pela sua participao. Que sirva de exemplo aos demais leitores.

Sugesto
Acompanho a revista desde a primeira edio. Quero dar os parabns pelas matrias que tm me ajudado muito. Gostaria de pedir uma matria sobre PHPReports, pois ele um utilitrio de relatrios muito eficaz. Eu mesmo serei o mais beneficiado com isso, pois tenho muitos relatrios para desenvolver e pouco conhecimento no assunto. Leandro Coelho
Sugesto anotada, Leandro. Este tema sempre do interesse de todos, mas infelizmente at o momento no foi submetido para a revista. Aproveitamos a oportunidade para comunicar que iniciantes tambm podem contribuir com artigos, pois nossa equipe est disposta a orientlos na pesquisa e desenvolvimento do tema abordado. Acreditamos que a viso de um iniciante, bem como o empenho em publicar o trabalho e contribuir com a comunidade, servir de modelo a ser seguido pelos demais.

nado ao tema.

Novos Colaboradores
J venho acompanhando todo o trabalho de vocs. Achei muito interessante o surgimento da PHP Magazine. Li todas as edies e fiquei muito encantado com todas. A quarta edio est tima. Tenho experincia de quatro anos com a Linguagem PHP e interesse em colaborar. Que procedimentos devo tomar?
Josu Camelo dos Santos :: Anpolis-GO Estamos sempre buscando pessoas interessadas em colaborar. Voc pode participar submetendo algum artigo de seu interesse ou integrando-se a nossa equipe de colaboradores, atividade que deve ser assumida como um compromisso. Em breve estaremos disponibilizando para todos os interessados um documento de diretrizes, onde ficar definida a forma de participao da equipe da revista.

Interesse em participao
Estou interessado em ajudar a revista. Eu poderia escrever sobre integrao do Adobe Flex com o PHP. O que acham? Ricardo Cerqueira :: Caruaru-PE
Estamos aguardando sua participao, Ricardo! E, como sempre, nos colocamos disposio para auxili-lo no que for necessrio Basta entrar em contato.

Mais sugestes
Sou pesquisador na rea de percepo auditiva e udio digital. Tenho trabalhado com PHP h algum tempo e estou trabalhando com projetos na rea de percepo auditiva e e-learning com aplicaes browser-based. Fica a sugesto de um artigo sobre como construir aplicaes Web com PHP, usando mdulos e templates na forma que o Joomla ou o PHPNuke fazem. Parabns pela revista!!! Rael Toffolo
Agradecemos sua participao, Rael! Toda sugesto bem-vinda. Na segunda edio apresentamos um artigo sobre a utilizao do Mambo, um gerenciador de contedo muito semelhante ao Joomla. Que sua mensagem sirva de incentivo para a submisso de um artigo relacio-

Elogios
Parabns a toda equipe pelo belo trabalho! Raquel Dezidrio Souto
com grande satisfao que recebemos suas mensagens de agradecimento e apoio. Para quem desconhece: a Raquel participou da segunda edio da revista com o artigo PHP nas Geocincias e, desde ento, tem acompanhado nosso trabalho.

ENVIE E-MAIL PARA


contato@phpmagazine.org.br S 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.

4 - 5a Edio - PHP Magazine

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

chamadas

O que o CONAPHP?
CONAPHP significa COngresso NAcional de PHP. um grande evento de PHP que consiste em vrias palestras de PHP apresentadas por palestrantes nacionais e internacionais reputados.

Quem vem palestrar?


Como demonstrao da sua fora e capacidade de organizao, a comunidade de PHP do Brasil est trazendo para este evento 2 palestrantes internacionais, para alm de vrios outros nomes conhecidos da cena de PHP do Brasil. Andrei ZmievskiAndrei Zmievski um reputado desenvolvedor no ncleo de PHP. Ele mais conhecido por ter sido o criador do sistema de templates Smarty e pela extenso de criao de aplicaes desktop PHP-GTK. Este ano ele vem falar do PHP 6, nomeadamente da maior mudana da qual ele foi o principal arquiteto: suporte nativo a Unicode. Este recurso vai facilitar muito o desenvolvimento de aplicaes internacionalizadas em que o texto usa alfabetos distintos dos usados na Europa e 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 internacional convidado. Apesar de ser ainda um jovem universitrio que estuda no Paraguai, Csar j participou em atividades dignas de grande destaque, como o fato de ter sido o vencedor do PHP Programming Innovation Award de 2007 organizado pelo site PHPClasses.org. Neste evento Csar vir falar sobre o seu mais recente trabalho de destaque incluido na iniciativa Google Summer of Code (GSoC). Trata-se do desenvolvimento de recursos avanados para o popular sistema de blogs WordPress que permitem lidar com arquivos de contedo de grande porte em sistemas mais apropriados para esse efeito, como o YouTube, Amazon S3, Google Picasa, etc..

Quando?
O CONAPHP 2008 vai decorrer nos dias 18 e 19 de Outubro.

Onde?
O CONAPHP 2008 est inserido no CONISLI 2008. O CONISLI um evento sobre Software Livre muito popular no Brasil que sempre teve a forte presena da comunidade de PHP desde 2005. Este ano a comunidade de PHP do Brasil se empenhou para organizar no CONISLI um grande evento de PHP com o nome CONAPHP. O CONISLI 2008 ter lugar nas da FIAP - Faculdade de Informtica e Administrao Paulista - em So Paulo com endereo Av. Lins de Vasconcelos, 1264, bairro Aclimao.

Quem?
Quem melhor conhece os interesses e necessidades da comunidade de PHP, so os prprios membros da comunidade. Por isso, o CONAPHP organizado exclusivamente por membros bem ativos da comunidade de PHP Brasileira. O tamanho da comunidade de PHP no mundo est estimado em 4,5 milhes de profissionais que trabalham no desenvolvimento e manuteno de mais de 20 milhes de sites. A comunidade de PHP no Brasil tem cerca de 5% do total global, portanto so mais de 200.000 profissionais de PHP brasileiros. Devido ao seu grande tamanho, j se pode contar que a comunidade de PHP do Brasil venha participar em peso no CONAPHP. O CONISLI 2008 tem uma expectativa de audincia de 1.500 congressistas, dos quais pelo menos 500 devero vir para assistir s palestras do CONAPHP.

PARTICIPE Est 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 do evento. Verifique as formas de inscries, saiba mais clicando aqui.
Eventos A PHP Magazine apia a iniciativa de eventos como cursos gratuitos, palestras e fruns. Para divulgar na revista, envie informaes sobre o evento para contato@phpmagazine.org.br , que teremos prazer em contribuir com a divulgao.

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

PHP Magazine - 5a Edio - 5

cincia
por Leandro Schwarz

PHP e o

Conhecimento Cientfico
ao redor do mundo.
A linguagem PHP amplamente utilizada em scripts para fins comerciais. Usa-se no desenvolvimento dos carrinhos de compras, das vitrines de lojas virtuais, dos stios de leiles e similares. Atravs de tecnologias hbridas, como AJAX, tambm possvel a sua utilizao como aplicaes de bate-papo, por exemplo, do servio de atendimento ao cliente via Chat. Muito difundido tambm o uso da linguagem PHP em scripts de fruns e listas de discusses; pouco se conhece, entretanto, sobre o uso da linguagem PHP como ferramenta de auxlio difuso de pesquisas acadmicas. Sendo assim, o artigo pretende um breve esclarecimento sobre o uso da linguagem para a difuso da cincia e tecnologia no Brasil e no mundo.
O objetivo deste artigo no desmerecer linguagens de 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 principal deste artigo mostrar e incentivar a utilizao da linguagem PHP como ferramenta para a difuso do conhecimento cientfico. Grande parte dos programadores em PHP utiliza a linguagem como suporte busca e populao de bases de dados. Pode-se verificar tal fato com uma simples busca na Internet por scripts em PHP sobre temas como login de cliente, loja virtual e contador de visitas. O nmero de resultados ultrapassa em muito a busca por qualquer script relacionado a calculadoras, grficos matemticos e similares. A razo incontestvel para este fato o uso muito mais difundido de lojas virtuais e ferramentas de ecommerce do que das ferramentas matemticas. At porque, o mercado de trabalho dos programadores PHP est voltado para este nicho. O que cabe aos programadores de PHP saber que a linguagem tambm utilizada dentro do meio cientfico como ferramenta de interface entre bases de dados e pesquisadores, possibilitando que experimentos cientficos sejam realizados de forma mais eficaz. Sero apresentadas sete aplicaes da linguagem PHP no meio acadmico. Todas foram publicadas em revistas de divulgao cientfica, nacionais e internacionais. 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 corrente na presena do aquecimento adicional ocasionado pela radiofreqncia. As descargas de plasma duram em torno 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 da complexidade do fenmeno envolvido, a confiabilidade do experimento obtida com a validao manual de cada experimento por meio da verificao da validade de cada medio e da procura por falhas nos sensores. Considerando-se que cada experimento gera entre 1.200 e 2.000 medies, grande quantidade de tempo e recursos humanos deve ser alocada para a validao de cada experimento. Para automatizar o sistema, uma rede neural artificial foi treinada para validar cada experimento, possibilitando que mais experimentos possam ser realizados em um mesmo dia, com custos mais baixos. A rede neural desenvolvida roda em um servidor LINUX RedHat e armazena os dados em um banco de dados relacional MySQL. O ncleo da validao do experimento foi feito em MATLAB 6. Os dados armazenados no banco de dados podem ser acessados pelos usurios por meio de uma interface Web. A interface foi desenvolvida em navegadores da Internet por apresentar-se mais leve que os softwares usuais. A interface foi desenvolvida em PHP 4.1.2, e roda em servidor Apache 1.3.12.

6 - 5a Edio - PHP Magazine

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

Atravs da interface Web possvel detectar a funcionalidade do sistema atravs de uma visualizao grfica baseada nos resultados de validao de um dado experimento. Um esquema de caixas coloridas permite identificarem-se sensores falhos, que aparecem em uma cor diferenciada. Clicando-se em cima de cada caixa, uma janela pop-up surge com os dados e a localizao do sensor. Outra funcionalidade do sistema permite que o usurio procure no banco de dados por experimentos arquivados de qualidade, fornecendo os dados do experimento que interessem ao pesquisador. Os usurios tambm podem selecionar um subconjunto de dados arquivados, especificando um sensor [Buceti, 2003].

sas bases de dados em um mesmo grfico, com cores diferentes para cada curva, permitindo a sua comparao. As escalas, os ttulos e os eixos X e Y podem ser escolhidos pelos usurios de maneira simplificada. Os eixos podem ser exibidos em escala linear ou logartmica, pois os grficos em escala logartmica apresentam a informao de maneira mais eficaz para sesses de baixa energia. Os grficos podem ser salvos em formato Postscript ou imagens GIF no computador do usurio, para visualizao posterior ou impresso. Os grficos disponveis esto no formato de grficos 2-D, entretanto, grficos 3-D sero desenvolvidos para visualizao em perspectiva das distribuies angulares versus energia incidente ou distribuies de energia secundrias versus energia incidente [Fan, 2004].

2. Reaes nucleares (China 2004)


Os dados nucleares compreendem tanto as propriedades do ncleo dos tomos, bem como as leis fundamentais que regem as iteraes nucleares. Embora alguns dos institutos nucleares, empresas e departamentos das universidades chinesas tenham construdo suas prprias bases de dados e ferramentas, no havia uma base de dados chinesa disponvel na Internet at 2001. As maiores bases de dados internacionais armazenam os dados em arquivos de texto em formato ASCII com padronizaes diferentes, por exemplo, os formatos Evaluated Nuclear Data File (ENDF) e Evaluated Nuclear Structure Data File (ENSDF) Estes formatos so, em geral, complexos para usurios no-especializados, o que apresenta grandes dificuldades na verificao e processamento de arquivos grandes. O sistema desenvolvido, chamado NDOS (Nuclear Data On-line Services), inclui um repositrio de dados central utilizando um banco de dados relacional e permite a busca interativa dos dados atravs de tecnologia baseada na WEB. O sistema NDOS tambm pode reconstruir facilmente os dados nucleares em formatos padronizados, tais como ENDF e ENSDF, a partir do repositrio central de dados. Esta caracterstica oferece flexibilidade para compara dados proveniente de bases de dados diferentes e o processamento on-line dos dados. O sistema roda em plataforma Linux e foi desenvolvido em PHP com a base de dados MySQL. A base de dados e os servios principais do sistema NDOS residem em uma estao de trabalho PC, mantido pelo Institute of Heavy Ion Physics (IHIP) da Universidade de Pequim. A maioria das funes de gerenciamento da base de dados, tais como a adio de dados, podem ser realizados remotamente. Uma ferramenta para plotar grficos foi desenvolvida utilizando a biblioteca JPGraph para PHP. A ferramenta permite que o usurio plote grficos com os dados provenientes da base de dados ou dos dados processados atravs de alguma das outras ferramentas do sistema. Pode-se plotar grficos utilizando dados de diver-

3. Mapeamento gentico (Sua 2004)


Um grande desafio na biologia atual a determinao da funo gentica em larga escala. Os padres estabelecidos e o vocabulrio controlado facilitam a integrao dos dados experimentais com o trabalho computacional. As bases de dados estruturadas e as ferramentas de busca possibilitam meios de caracterizar a funo de um dado gene. O seqenciamento gentico completo da planta ornamental Arabidopsis foi alcanado no ano de 2000 e permitiu monitorar a expresso desta planta em escala gentica usando microarrays. O array ATH1, por exemplo, representa aproximadamente 23.750 genes da Arabidopsis. Milhares de arrays foram processados desde ento. A combinao mltiplas bases de dados gera dvidas quanto sua compatibilidade, em particular quando se comparam dados de diferentes organismos. Um sistema on-line foi desenvolvido para facilitar a descoberta da funo gentica, compreendendo uma base de dados de expresso gentica e um conjunto de ferramentas de busca e anlise, chamado GENEVESTIGATOR. O GENEVESTIGATOR foi desenvolvido como sendo uma ferramenta on-line amigvel para anlise de dados de expresses genticas em larga escala. Consiste de uma base de dados MySQL e um servidor rodando scripts em linguagem PHP. O GENEVESTIGATOR acessado gratuitamente para todas as instituies acadmicas. Uma vez que a base de dados possui tanto dados pblicos quanto confidenciais, um sistema usurios com perfil dual fio criado para gerenciar o acesso de usurios de perfil pblico e privado. Todos os usurios devem se registrar e iniciar uma sesso com usurio e senha. Os dados coletados para registro so utilizados apenas para administrao da base de dados e para aperfeioar o funcionamento do sistema. As informaes pessoais no so compartilhadas com terceiros [Zimmermann, 2004].

4. Tele-consulta mdica (Turquia 2004)


A equipe mdica de regies remotas tem grande dificuldade para conseguir a opinio de mdicos especialista em uma determinada rea, principalmente porque estes,

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

PHP Magazine - 5a Edio - 7

normalmente, trabalham nos grandes centros urbanos. Portanto, os pacientes de zonas remotas devem viajar para os centros urbanos procura de opinio especializada. A telemedicina a transferncia de dados mdicos eletrnicos, como imagens de alta resoluo, sons, vdeos e sinais bioeltricos, entre duas regies. Sistemas de tele-consulta so utilizados por mdicos para consultar pacientes de regies remotas em tempo real ou em momentos mais convenientes ao mdico. As clnicas de tele-consulta so equipadas de forma a realizar os exames bsicos, como presso sangunea, temperatura corporal, freqncia cardaca, pesagem etc. Equipamentos de ECG, EEG, mquinas de raios-X e ultra -sonografias tambm podem ser fornecidos. As clnicas empregam clnicos gerais, enfermeiras e tcnicos especializados na utilizao e manuteno dos equipamentos e computadores. Os mdicos locais e as enfermeiras utilizam o sistema para enviar os dados dos pacientes para uma base de dados central. Os mdicos especialistas localizados nos grandes complexos mdicos utilizam o sistema para monitorar os pacientes atravs de pginas de Internet. Aps a anlise dos dados enviados pelas clnicas locais, os especialistas podem enviar seus laudos pelos meios de comunicao convencionais (telefone, fax, e-mail etc.). O sistema foi desenvolvido em PHP, principalmente pela gratuidade da linguagem. Outras vantagens da linguagem para o sistema incluem a independncia de plataforma (rodando em sistemas UNIX, Windows e Macintosh com apenas poucas modificaes no cdigo), a velocidade, o baixo uso de memria, a facilidade de aprendizado, a interface intuitiva (permitindo que os comandos PHP sejam inseridos por entre as tags HTML) e a grande difuso e suporte na comunidade open-source. Alm destas vantagens, a PHP uma linguagem robusta, possuindo caractersticas avanadas de programao. Diferente de outras linguagens, a PHP permite a integrao com bibliotecas externas. Um problema em potencial pertinente transmisso de dados mdicos a segurana. Para garantir o sigilo e a integridade dos dados, os usurios devem acessar a base de dados atravs de usurio e senha. Uma vez autenticado, uma sesso criada para armazenar os dados do usurio e um cookie criado na mquina do cliente. Na sesso esto armazenados o usurio e a senha, entretanto, o endereo de IP, o tempo de acesso e a informao do navegador tambm podem ser armazenados. Os dados da sesso so codificados atravs da funo HASH md5(), que possui taxa de coliso 2-128, o que um nmero bem baixo. Quando o usurio realiza, sai do sistema ou fecha seu navegador, a sesso criada apagada. Alm disso, cada usurio est associado a um nvel de acesso, definindo quem pode ler, escrever e atualizar os dados na base de dados. A HTML pura no capaz de desenhar figuras, portanto, uma forma de apresentar imagens mdicas em pginas da Internet desenh-las no servidor e envilas para o navegador em um formato compatvel. Para
8 - 5a Edio - PHP Magazine

isto, foi utilizada a biblioteca grfica GD uma biblioteca escrita em ANSI C, gratuita que permite a criao de imagens de forma dinmica. Como caracterstica adicional do sistema, a interface grfica permite ao usurio converter a imagem para uma matriz binria antes da transmisso para o cliente. Este processo fornece uma matriz de 256 nveis de cores para cada pixel, permitindo seu download para o computador do cliente, onde ferramentas de processamento digital de sinais podem ser utilizadas. Alm de gerenciar texto e imagens, o sistema tambm suporta dados multimdia, como filmes de ultra-sonografia, tomografia computadorizada e ressonncia magntica e udio de sons cardacos e respiratrios, reproduzidos em uma janela do navegador [Kuntalp, 2004].

5. Identificao de espcies (ustria 2005)


O gnero de fungos Trichoderma (Hypocreales, Ascomycota) contm fungos freqentemente encontrados em madeira em decomposio e no solo, compondo a maior parte da biomassa total dos fungos. Algumas espcies deste gnero so economicamente importantes na produo de enzimas industriais, antibiticos e como bioagentes aplicados no controle dos patgenos de plantas. As espcies Longibrachiatum so conhecidas como patgenos oportunistas de mamferos imunocomprometidos, incluindo seres humanos e diversos indivduos da espcie so encontrados como contaminantes de ambientes domsticos. Estas diversas implicaes dos Trichoderma na sociedade humana tornam a identificao das espcies um tpico de grande importncia. Devido homoplasia, a determinao morfolgica difcil mesmo para especialistas, o que tem freqentemente resultado no uso incorreto do nome das espcies associadas produo de enzimas, ao biocontrole de patgenos, infeco humana e formao de metablitos secundrios. O artigo apresenta um sistema de codificao de barras baseado nos oligonucleotdeos da cadeia de DNA como um mtodo rpido para a identificao das espcies Hypocrea e Trichoderma. O mtodo originou um sistema chamado TrichOKey v 1.0, com interface Web amigvel baseado em uma biblioteca com poucas, porm essencialmente invariveis e especficos entre espcies, seqncias de nucleotdeos dos loci ITS1 e 2. A biblioteca de marcadores de oligonucleotdeos foi armazenada em uma base de dados MySQL. O programa TrichOKEY v. 1.0 foi escrito na linguagem PHP (PHP4) dentro do cdigo HTML das pginas. A base de dados e os scripts esto localizados no endereo eletrnico http://www.isth.info um portal sobre a taxonomia Hypocrea/Trichoderma, desenvolvido pelo grupo dos autores. O servidor roda com o sistema operacional Linux, verso do kernel 2.4.21-15.0.4.ELsmp, com servidor Apache verso 1.3.33, PHP verso 4.3.10 e servidor

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

de base de dados MySQL verso 4.0.22-standard. Os autores planejam a expanso do sistema para contemplar a identificao de quaisquer espcies, sendo tambm adaptado para os indivduos futuramente encontrados [Druzhinina, 2005].

Consideraes finais
Este artigo apontou as vrias aplicaes no comerciais da linguagem PHP, demonstrando a possibilidade de implementao de sistemas para divulgao do conhecimento e desenvolvimento cientfico. Espera-se que, em relao ao desenvolvimento de interfaces grficas, suporte matemtico e processamento de imagens on-line, este documento tenha apontado a linguagem PHP como uma alternativa vivel aos profissionais do ramo cientfico das empresas, universidades e centros tecnolgicos brasileiros.

6. Sensoriamento Remoto (Brasil 2007)


Na Universidade Federal do Rio Grande do Sul (UFRGS), Leonardo Monteiro Brys e Srgio Florncio de Souza desenvolveram um sistema na Internet para disponibilizar conceitos e definies de tcnicas de Processamento Digital de Imagens Orbitais (PDI). Os autores justificam a escolha da linguagem PHP o fato de ser uma linguagem de programao server-side, possuir boa apresentao ao usurio e eficiente suporte matemtico e suporte a um grande nmero de banco de dados. Outras vantagens incluem a facilidade de implementar, 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 suporte ao Geoprocessamento no Curso de Engenharia Cartogrfica da UFRGS O sistema desenvolvido permite que o usurio faa o

Referncias e links sugeridos


BRYS, L.M.; SOUZA, S.F. Aplicao da linguagem PHP em sensoriamento remoto. In: Anais XIII Simpsio Brasileiro de Sensoriamento Remoto, Florianpolis: 2007. BUCETI, G.; CENTIOLI, C.; IANNONE, F.; PANELLA, M.; RIZZO, A.;VITALE, V. A rating system for post pulse data validation. 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 Trichoderma and 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 Nuclear Energy, v. 31, 2004. KUNTALP, M.; AKAR, O. A simple and low-cost Internetbased teleconsultation system that could effectively solve the health care access problems in underserved areas of developing countries. Computer Methods and Programs in Biomedicine, n 75, 2004. WANG, Z.J.; YANG, H.H.; DING, J. Webgraphics for the computation of invariant measures. Applied Mathematics and Computation, v. 187, 2007. ZIMMERMANN, P.; HIRSCH-HOFFMANN, M.; HENNING, L.; GRUISSEM, W. GENEVESTIGATOR. Arabidopsis mi-

upload de uma imagem em esquema de cores RGB e


outra em esquema pancromtico, as quais sero misturadas dinamicamente. O script transforma o sistema RGB em sistema HSV (Hue, Saturation, Value Tonalidade, Saturao e Brilho) e combina as imagens, preservando as caractersticas espectrais da imagem RGB e as caractersticas espaciais da imagem pancromtica [Brys, 2007].

7. Densidade de probabilidade (Estados Unidos 2007)


A proposta do artigo foi explorar a utilizao da linguagem PHP para proporcionar representaes visuais para a distribuio de probabilidade de rbitas caticas. Foi desenvolvido um sistema em PHP que permitia as seguintes funcionalidades: seleo automtica de um sistema de clculo; seleo do sistema de clculo pelo usurio; a exibio da distribuio densidade de probabilidade na forma de tabela; e os grficos da densidade de probabilidade. Todos os sistemas so enviados a partir de formulrios HTML no mtodo POST para a pgina em PHP, na qual cada sistema de clculo representado por uma funo de clculo especfica. Para o acesso s variveis postadas, foi utilizada a varivel $_REQUEST. Os grficos foram implementados em uma pgina em separado utilizando a biblioteca GD. O artigo disponibiliza parte do cdigo [Wang, 2007].

Leandro Schwarz - leandroschwarz@gmail.com Engenheiro eletricista pela Universidade Federal de Santa Catarina (UFSC). Mestre em Engenharia Eltrica (rea de concentrao: Engenharia Biomdica) pela UFSC. Atuando desde 2000 com desenvolvimento Web, possui slidos conhecimentos em PHP e MySQL. Atualmente professor do Departamento de Design do Centro de Artes (CEART) da Universidade do Estado de Santa Catarina (UDESC), e colaborador do Laboratrio de Instrumentao (Labin) do Centro de Cincias da Sade e do Esporte (CEFID) da UDESC.

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

PHP Magazine - 5a Edio - 9

PHP-GTK
por Pablo DallOglio

Protegendo cdigos em

PHP PHP-GTK
Este artigo apresenta algumas formas simples de proteger o acesso ao cdigo-fonte de aplicaes desenvolvidas em PHP-GTK.
O PHP uma linguagem que nasceu na Web e neste ambiente que mais adotado. O ambiente Web regido pela arquitetura cliente-servidor, em que h o cdigo do programa interpretado pelo servidor e o resultado de sua execuo. Normalmente nesse modelo, o resultando cdigo HTML para ser visualizado no navegador do cliente. Neste caso, a prpria arquitetura clienteservidor impede o usurio de ter acesso ao cdigo-fonte do programa, a menos que a pessoa tenha acesso ao servidor da aplicao. Quando desenvolvemos uma aplicao grfica em PHP-GTK, rodamos a aplicao de forma local, utilizando recursos da mquina cliente, da mesma forma que em aplicaes em Delphi ou Visual Basic. Mas, no caso do PHP-GTK, o cdigo da aplicao interpretado diretamente pelo executvel do PHP. Desta forma, o cdigofonte fica exposto ao cliente, caso ele queira investiglo. O objetivo de se proteger um cdigo em PHP-GTK pode ser comercial, impedindo que o cliente tenha acesso indevido ao cdigo-fonte e realize cpias piratas, mas tambm pode evitar que um usurio curioso investigue o cdigo do mesmo e interfira no seu funcionamento, tomando conhecimento de senhas de acesso ao banco de dados, por exemplo. As tcnicas que iremos estudar se aplicam tanto para a utilizao com PHP-GTK, quanto para utilizao no desenvolvimento de uma aplicao PHP Web. r o mtodo onClick(). A tarefa do mtodo onClick exibir uma janela de mensagem com o nome digitado pelo usurio.
<?php class Application extends GtkWindow { private $nome; /* * mtodo construtor * cria a janela e os campos */ function __construct() { parent::__construct(); $this->set_title('Aplicao'); // cria uma caixa vertical $vbox = new GtkVBox; // campo para digitao do nome $this->nome = new GtkEntry; // cria o boto $botao = new GtkButton('Exibe'); // conecta o boto ao $botao->connect('clicked', array($this, 'onClick')); // adiciona os campos na vbox $vbox->add($this->nome); $vbox->add($botao); // adiciona a vbox na janela $this->add($vbox); } /* * mtodo onClick * Exibe o nome digitado pelo usurio */ function onClick() { $dlg =new GtkMessageDialog(null, Gtk::DIALOG_MODAL, Gtk::MESSAGE_INFO, Gtk::BUTTONS_OK, $this->nome->get_text()); $dlg->run(); $dlg->destroy(); } } ?>

1. O programa
Para demonstrar as tcnicas de proteo de cdigo, em primeiro lugar vamos construir uma pequena aplicao a ser protegida, chamada app.php. A nossa aplicao de exemplo extremamente simples. Ela est toda contida em uma classe chamada Application. A classe Application na verdade filha da classe GtkWindow, logo, pelo mecanismo de herana, ela uma janela. Dentro da janela Application, criaremos uma caixa vertical (GtkVBox) e dentro desta caixa vertical colocaremos dois widgets. O primeiro ($this->nome) um objeto GtkEntry para digitao de um nome qualquer. J o segundo, ($botao) um boto que ao ser clicado executa-

10 - 5a Edio - PHP Magazine

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

ma empacotador da aplicao. Este programa ir ler o cdigo da aplicao por meio da funo file_get_contents(), para ento remover as tags de incio e fim do <?php?> com a funo substr(). Aps, iremos codificar o fonte do programa com a funo base64_encode(). Note que aqui poderamos estar utilizando mtodos mais poderosos de criptografia. Ao final, gravamos o cdigo compactado e criptografado no arquivo app.php.cri.
<?php $code = file_get_contents('app.php'); $code = substr(trim($code),6, -2); $code = base64_encode($code); file_put_contents('compress.zlib:// app.php.cri', $code); ?>

Figura 1 - Aplicao de exemplo

Agora, para executar tal aplicao, teremos de escrever um segundo programa para incluir a classe app.php e, ento, instanciar um objeto desta classe e executar seu mtodo show_all(), para exibir a janela.
<?php // inclui a classe include_once 'app.php'; // instancia um objeto $app=new Application; // exibe a janela $app->show_all(); Gtk::Main(); ?>

Agora, para podermos executar tal programa criptografado, temos de escrever outro programa. Este programa ir ler o contedo do arquivo criptografado, chamado app.php.cri, descriptograf-lo e executar este cdigo por meio da funo eval(). Aps, o funcionamento do programa continua o mesmo.
<?php // inclui a classe criptografada $code = file_get_contents('compress.zlib:// app.php.cri'); eval(base64_decode($code)); // instancia um objeto $app=new Application; // exibe a janela $app->show_all(); Gtk::Main(); ?>

2. Compactao
A forma mais simples de se proteger o cdigo de um programa compactando-o. Este mecanismo protege o acesso ao programa de grande parte dos usurios, mas facilmente reversvel, tendo em vista que basta o usurio final da aplicao descobrir que ele deve descompactar um arquivo para ter acesso ao seu cdigo-fonte. Para compactar a aplicao, iremos utilizar o aplicativo 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 simplesmente executarmos o comando include_once sobre o arquivo compactado, precisamos indicar qual o wrapper utilizado para sua interpretao. Neste caso, o wrapper compress.zlib. O arquivo descompactado instantaneamente e a classe fica disponvel.
<?php // inclui a classe compactada include_once 'compress.zlib://app.php.gz'; // instancia um objeto $app=new Application; // exibe a janela $app->show_all(); Gtk::Main(); ?>

Voc deve ter percebido que as duas tcnicas demonstradas at aqui so bastante simples. Da mesma forma que so simples de utilizar so simples de serem desfeitas, uma vez que o usurio ter acesso ao cdigofonte 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 tela. Claro que nenhum usurio final faz isto, mas qualquer desenvolvedor com conhecimentos bsicos em PHP pode fazer isto.

4. bcompiler
O bcompiler uma extenso do PHP que faz parte do PECL (The PHP Extension Community Library), que um repositrio de extenses comunitrias para PHP, escritas em linguagem C. Funciona assim como o PEAR (PHP Extension and Application Repository), que um repositrio de extenses escritas em PHP. O bcompiler foi escrito com o objetivo de codificar arquivos, classes ou funes por completo em uma aplicao proprietria. De acordo com o autor da bcompiler, Alan Knowles, a utilizao da extenso pode melhorar o desempenho em at 30%, embora o cdigo codificado seja bem maior em termos de tamanho fsico ocupado pelo arquivo em

3. Criptografia Simples
Podemos melhorar um pouco mais o algoritmo anterior, criptografando o cdigo da aplicao alm de compact-la. Para tal, iremos escrever um pequeno progra-

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

PHP Magazine - 5a Edio - 11

relao aplicao normal. Em termos de proteo de cdigo, seguro dizer que impossvel recriar o exato cdigo-fonte original. Para utilizar a bcompiler, primeiro devemos instal-la. Alguns pr-requisitos devem ser satisfeitos em alguns ambientes. No caso do sistema operacional Ubuntu, ser necessrio instalar algumas bibliotecas relacionadas compactao de arquivos (bzip2).
# apt-get install libbz2-dev bzip2

Aps isto, podemos proceder para a instalao da

bcompiler em si. Para tal, utilizamos o binrio pecl, que


acompanha a instalao do PHP. Para tal, digitamos o seguinte comando a partir do diretrio onde os binrios do PHP esto instalados.
# <php>/bin/pecl install bcompiler-0.8

interpretador ir carregar a extenso bcompiler.so, que disponibiliza as funes da bcompiler, abrir o arquivo de byte-codes por meio da funo fopen() e interpretar o arquivo codificado por meio da funo bcompiler_read(). Note que esta funo disponibiliza para aplicao exatamente o mesmo cdigo que foi codificado. Desta forma, o programador ter neste momento acesso classe Application, que faz parte do arquivo original app.php que foi codificado. Aps executarmos a bcompiler_read(), fechamos o arquivo e ento j podemos instanciar objetos da classe Application. No final do programa instanciamos um objeto e exibimos ele em tela pelo mtodo show_all(). Neste momento o programa ser executado da mesma forma que em nosso primeiro exemplo onde interpretvamos diretamente o cdigofonte.
<?php // carrega a bcompiler dl('bcompiler.so'); // abre o arquivo compactado $fh = fopen("compress.zlib:// compiled.phpb","r"); // l os byte-codes bcompiler_read($fh); // fecha o arquivo fclose($fh); // intancia o objeto $app=new Application; // exibe a janela $app->show_all(); Gtk::Main(); ?>

Agora que temos a bcompiler instalada, teremos de escrever dois programas. O primeiro programa ir gerar os byte-codes e o segundo ir interpret-los. Para distribuir o programa ao usurio final, precisaremos distribuir apenas os byte-codes e o programa interpretador. Este primeiro programa listado a seguir o codificador, sua funo ler o contedo de nosso programa app.php, codific-lo e gravar o contedo codificado dentro de um arquivo chamado compiled.phpb, que alm de codificado ser tambm compactado. Para codificar o arquivo, utilizamos a funo bcompiler_write_file (), alm de outras com o objetivo de criar o cabealho e rodap do arquivo.
<?php // carrega a extenso bcompiler dl('bcompiler.so'); // define o arquivo a ser gravado os bytecodes $fh = fopen("compress.zlib:// compiled.phpb","w"); // escreve o cabealho do arquivo bcompiler_write_header($fh); // codifica o arquivo 'app.php' bcompiler_write_file($fh, 'app.php'); // escreve o rodap do arquivo bcompiler_write_footer($fh); fclose($fh); ?>

Consideraes finais
Neste artigo estudamos algumas tcnicas muito simples de se proteger o acesso ao cdigo-fonte at abordarmos a bcompiler, uma extenso bastante complexa e poderosa do PHP. Sabemos da existncia de diversas ferramentas comerciais com o objetivo de proteger ou ofuscar cdigos em PHP. Mesmo assim, focamos este artigo em solues simples, livres e que funcionassem no apenas no ambiente Web, mas tambm para quem desenvolve em PHP-GTK.

Referncias e links sugeridos


[PHP-GTK Brasil] http://www.php-gtk.com.br [Livro PHP-GTK] http://www.php-gtk.com.br/book [Site do Autor] http://www.pablo.blog.br [Site do PECL] http://pecl.php.net [Site bcompiler] http://www.php.net/bcompiler

Aps rodarmos o programa codificador, o arquivo compiled.phpb ser gerado. O contedo do arquivo codificado se parecer em muito com o trecho listado a seguir, ou seja, totalmente ilegvel.
80><8a>^C2.^U^P^PqAA^P^Q^E^E<9 5<94>^L^Z`M^[h^A8E`<9f>^T! PZl<88>LM<83>,6^]<90>9B<9 <88><82><99>T!` c6^B<9e>43 c<8d><9a>^Byz ,4'^S/-<98><89 \+4@+pVWcVh-H~O<8c>D >7M^NL <99>7<82>7<86>3^Zu^U

Pablo DallOglio - pablo@dalloglio.net Pablo Dall'Oglio bacharel em Informtica pela UNISINOS. Autor dos livros "PHP Programando com Orientao a Objetos" e "PHP-GTK Criando Aplicaes Grficas com PHP", pela editora Novatec. Tambm foi o criador do PHP-GTK Brasil. Atualmente, diretor de tecnologia e proprietrio da Adianti Solutions (www.adianti.com.br).

Aps codificarmos nosso programa, podemos escrever o programa interpretador que ser distribudo juntamente com os byte-codes (compiled.phpb). O programa
12 - 5a Edio - PHP Magazine

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

segurana
por Ismael Rocha

SQL Injection em PHP:

vulnerabilidades
e preveno.
Detalharemos algumas vulnerabilidades referentes ao ataque de injeo de comandos SQL em aplicaes escritas em PHP, suas conseqncias e algumas boas prticas para sua preveno.
Em diversos momentos o foco principal atender a todos os requisitos definidos pelo cliente num prazo realmente curto. Em algumas ocasies, por falta de planejamento ou porque realmente o desenvolvedor no se atm a detalhes, o projeto acaba deixando algumas lacunas de segurana abertas aps a publicao. Umas das falhas mais comuns e encontradas facilmente no mudo Web a injeo de comandos SQL, conhecido como SQL Injection. Apresentaremos aqui o que essa falha e quais as conseqncias que a explorao da falha pode nos trazer, bem como prticas para preveni-la. uma vulnerabilidade de SQL Injection; - Integridade: assim como possvel ler informaes confidenciais, tambm possvel fazer mudanas ou at mesmo excluir informaes usando ataque de SQL Injection.

2. Demonstrao de implementaes vulnerveis a SQL Injection


Tomaremos como exemplo de cdigo vulnervel um

script simples para fazer autenticao na aplicao a


partir de um usurio e senha fornecidos por um cliente. Tambm ser apresentado outro script cuja principal funo demonstrar ao usurio uma notcia, bem como seu ttulo e autor. Essas informaes so recuperadas da base de dados por meio de parmetros fornecidos via mtodos POST ou GET. Veja abaixo um exemplo de script vulmervel de autenticao (login):
<?php // Script: artigo1.php (Sript de autenticao) // Funcao: demonstrar vulnerabilidade de SQL I njection $login = $_POST['login']; $senha = $_POST['senha']; mysql_connect "localhost", "root", "ismael"); mysql_select_db("teste"); $query = "SELECT * FROM users WHERE login_use r='$login' AND password_user='$senha'"; $consulta = mysql_query($query) or die (mysql_error()); $linhas = mysql_num_rows($consulta); if ($linhas > 0) { echo "Seja bem-vindo!!"; } else { echo "Login e/ou senha invalidos!!"; } ?>

1. O que SQL Injection?


Sql Injection um tipo de ataque que consiste na injeo de uma consulta SQL via entrada de dados do cliente para a aplicao. Um ataque bem sucedido pode ler dados sigilosos de uma base de dados, modific-los (update/insert/delete), executar operaes de administrao no banco de dados (ex: shutdown) e, em alguns casos, executar comandos no sistema operacional (ex: SQL Server xp_cmdshell). Um exemplo de execuo seria=> exec xp_cmdshell dir c:, O ataque tambm pode fazer leitura (Mysql load_file) de arquivos do sistema.
As principais conseqncias de uma injeo de SQL bem sucedidas podem ser: - Confidencialidade: banco de dados geralmente guardam informaes confidenciais. A perda de confidencialidade um freqente problema com as vulnerabilidades de SQL Injection; - Autenticao: se a aplicao no faz os devidos tratamentos nos dados que so inputados pelo usurio e j encaminha tais dados para a query do banco de dados 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 ser possvel mudar a informao por meio da explorao de

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

PHP Magazine - 5a Edio - 13

No nosso formulrio submeteremos as seguintes informaes conforme mostrado na tela abaixo:

} $query = r FROM noticias $consulta = $linhas = "SELECT titulo, conteudo, auto WHERE id=$id"; mysql_query($query); mysql_num_rows($consulta);

Figura 1 - Formulrio de Login

Observe que no campo senha informamos a seguinte instruo: OR 1=1 Da forma como os dados foram submetidos, a query montada dinamicamente no script acima, ficaria da seguinte forma: SELECT * FROM users login_user='qualquercoisa' AND word_user=' ' or 1='1' WHERE pass-

if ( $linhas==0 ) { echo "No foi possvel recuperar a not cia informada!!"; } else { echo mysql_result ($consulta, 0, titulo)."<br><br>"; echo mysql_result ($consulta, 0, conteudo); echo mysql_result ($consulta, 0, autor)."<br><br>"; } ?>

Na figura 3, nosso script funcionando com uma requisio normal:

Dessa maneira, a afirmao acima verdadeira, pois a consulta tenta encontrar algum registro se a condio campo login_user for igual a qualquercoisa e password_user= ou 1 for igual a 1. Da maneira como foi implementado o script, a autenticao acontece a partir do momento em que a consulta retorna alguma linha. Sendo assim, no caso mencionado, todas as linhas da tabela users foram retornadas, o que, conseqentemente, nos permitiu a autenticao na aplicao.

Figura 3 Cdigo de notcias em funcionamento normal

Figura 2 - Autenticao realizada com sucesso

Agora injetaremos a seguinte instruo SQL atravs do parmetro ID, passado via GET para a aplicao, com objetivo de fazer a unio com um segundo select, nos trazendo alguns campos da tabela user do banco MySQL: UNION SELECT user,host,password FROM mysql.user LIMIT 1,1 A figura 4 demonstra o resultado aps a insero da instruo SQL acima.

Abaixo, damos um exemplo de cdigo do script vulnervel de notcias:


<?php // Script: artigo1.php (Script de noticias ) // Funo: demonstrar vulnerabilidade de S QL Injection mysql_connect("localhost", "root", "" ); mysql_select_db("teste"); if ( !isset($_GET[id]) ) { echo "A notcia a ser lida no foi inf ormada!"; exit; } else { $id = $_GET[id];

Figura 4 Host, usurio e senha retornados

14 - 5a Edio - PHP Magazine

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

A instruo injetada nos retornou os campos user, login e password, oriundos da base MySQL, que so os usurios vlidos que se conectam ao servidor de banco de dados. Explorando essa falha possvel obter os usurios e senhas do SGDB. Observe que nesse caso, a aplicao vulnervel se conecta como root ao SGDB. Por isso 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 base de dados information_schema (disponvel a partir da verso 5.0) para levantar informaes diversas, tais como nome de bancos, tabelas, colunas entre outras coisas sobre as quais o usurio da aplicao conectado ao SGDB possui privilgios. Veja o exemplo: UNION SELECT table_name, table_schema, column_name FROM information_schema.columns LIMIT 286,1

3.1 Os recursos de escape


Para aqueles que no conhecem, o Magic Quotes um recurso do PHP em que so inseridos automaticamente caracteres de escape (\) em todos os dados enviados para um script PHP, via POST ou GET e Cookie. Com esta opo habilitada no php.ini, nosso script que faz 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 ao banco ficasse da seguinte forma:
SELECT * FROM users WHERE login_user='qualquercoisa' AND password_user='\'or 1=\'1'

Entretanto, como foi observado, h casos de injeo de instrues em que um atacante no necessita de aspas, como no exemplo do script de notcia e, sendo assim, funes de escape como o addslashes(), mysql_real_escape_strings() se mostrariam ineficientes para conter tais inseres. preciso observar que conforme manual do PHP, o recurso Magic Quotes tornou-se obsoleto e foi removido do PHP 6.0. Confiar neste recurso extremamente no recomendado.

3.2 Validando os dados recebidos


Nos exemplos mostrados no h qualquer tipo de validao dos dados enviados pelo cliente. A recomendao sempre validar os dados recebidos por um usurio, checando/convertendo seu tipo de acordo com o campo a ser consultado, delimitando o tamanho de acordo com o campo para consulta e aplicando expresso regular sobre os mesmos. No script de notcias, o problema da injeo de instruo SQL seria resolvido facilmente apenas convertendo o valor de $_GET[id] para um inteiro, usando a funo intval(). No caso, o PHP ao converter 1 UNION ... retornaria apenas 1. No exemplo de autenticao, caso o sistema de senhas da aplicao, por exemplo, permitisse apenas nmeros e letras, poderia-se utilizar expresso regular para checar de os dados fornecidos. Funes como preg_match(), strlen(), intval(), intfloat(), dentre outras, so bastante teis no auxlio da validao dos dados.

Figura 5 No exemplo acima, a injeo de comandos nos retorna o nome de uma tabela, nome de um banco e nome de um campo dessa tabela.

Com a injeo da instruo acima, obtivemos como resultado os campos table_name, table_schema, column_name do banco de dados information_schema. Verificamos que existe uma base de dados chamada helpdesk, uma tabela chamada tickets_up e um campo chamado tamanho_anexo. Um atacante poderia facilmente montar o desenho de todos os bancos de dados em que o usurio da aplicao conecta do SGDB possui permisso e, conseqentemente, ler as informaes contidas nessas bases aps o conhecimento do nome das tabelas e campos.

3. Medidas preventivas
H diversas formas de se prevenir contra a injeo de comandos SQL. Pode-se utilizar desde recursos da prpria engine PHP, como magic_quotes_gpc (em alguns casos), at o uso funes diversas como escape de dados (mysql_real_scape_string, addslashes), alm das prepared statements.

3.2 Prepared statements (medida eficaz contra SQL Injection)


Prepared statement a habilidade de definir uma consulta uma vez e execut-la diversas vezes com diferentes parmetros. Sua principal funo separar a lgica da consulta SQL dos dados recebidos para a montagem da query dinamicamente. Sendo assim, a nossa query do script de autenticao ficaria o como:

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

PHP Magazine - 5a Edio - 15

SELECT * FROM users WHERE login_user=? AND password_user=? Substitumos as variveis $login e $senha por duas interrogaes. Ao enviar a query preparada para o banco de dados, ele fica no aguardo dos parmetros para fazer a comparao (nesse caso) e tambm da instruo para executar a query. Dessa forma, se envissemos algo como OR 1=1, esse valor apenas seria comparado com o campo password_user assim que fizssemos a ligao do parmetro aguardado com a varivel $password, pois, a lgica da query j foi montada previamente e est apenas a espera de um parmetro. O recurso de prepared statements pode ser utilizado em diversas consultas SQL como updates, inserts, deletes. Utilizada amplamente, a biblioteca MySQLD infelizmente no possui esse tipo de recurso, entretanto, h diversas outras bibliotecas que trabalham com prepared statements, como a MySQLI e PDO. Abaixo, segue um exemplo do mesmo script utilizando MySQLI. Abaixo, um cdigo com instrues Prepared Statements.
<?php //Script:artigo1.php (Script de autenticao) $login = $_POST['login']; $senha = $_POST['senha']; //Instancia objeto para conexo com banco $bd = new mysqli (localhost , user_ismael, ismael, teste ); $query = "SELECT * FROM users WHERE login_ user=? AND password_user=?"; //Mtodo para envio de querys preparadas $stm = $bd->prepare($query); //Mtodo para fazer a ligao //de contedo aos parmetros esperados //pela query preparada $stm->bind_param(ss, $login, $senha); // Mtodo para executar a query $stm->execute(); $stm->store_result(); $linhas = $stm->num_rows; if ($linhas > 0) { echo "Seja bem-vindo!!"; } else { echo "Login e/ou senha invalidos!!"; } ?>

descobrir senhas etc. A preveno no algo to complicado. As principais dicas so: sempre validar a entrada de dados oriundas dos clientes e utilizar as prepared statements. A utilizao de frameworks tambm pode contribuir para a reduo da vulnerabilidade, visto que alguns possuem mecanismos de filtragem de dados que utilizam diversos recursos, inclusive expresses regulares. Aos programadores mais experientes fica a dica de revisarem seus cdigos, pois a correria do dia-a-dia faz com que deixemos brechas s vezes imperceptveis e, segundo o Gartner, rgo bastante reconhecido na rea de pesquisas tecnolgicas, 75% dos ataques bem sucedidos ocorrem via aplicaes Web.

Referncias e links sugeridos


[PHP] ht tp ://w w w .p hp .ne t/m a nua l/pt _ BR / book.mysqli.php http://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 - ismaelrg@gmail.com Graduando em Sistemas de Informao pela Grupo Anhaguera, atua h mais de 5 anos na rea de desenvolvimento de sistemas em diversas linguagens. Atualmente, trabalha com segurana da informao

Consideraes finais
inegvel o poder de destruio de um ataque bem sucedido de SQL Injection. Como visto, um atacante pode burlar um sistema de login, obter dados de diversos databases do SGDB, bem como ler arquivos de sistema,
Criando Aplicaes Grficas com PHP

16 - 5a Edio - PHP Magazine

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

arquitetura
por Almir Neto e Otvio Calaa

Desenvolvendo em trs camadas

com PHP, MVC e AJAX


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.
O MVC (Model-View-Controller) um Padro de Arquitetura de Software criado com o objetivo de aumentar a produtividade, separando a lgica do negcio da apresentao com o uso de controladores e implementando alguns Design Patterns (Padres de desenvolvimento de software). Sua maior vantagem a facilidade de manuteno do cdigo, pois oferece estrutura de diretrios, arquivos e classes criadas. J o AJAX (Asynchronous Javascript And XML) um conjunto de tecnologias que tem como intuito tornar mais dinmica e interativa a camada de apresentao (View), fazendo com que o usurio tenha uma experincia muito melhor com o aplicativo. Se utilizados da maneira correta, PHP, MVC e AJAX permitem o desenvolvimento de aplicaes com alta produtividade, interatividade e qualidade. 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 orientadas a Objetos, como C# e Java, surgiu tambm uma nova maneira de se desenvolver, separando em uma camada especfica o cdigo relativo persistncia. Com isso, um padro antigo se popularizou, principalmente por ter sido implementado em alguns frameworks. Esse padro o MVC, que foi descrito pela primeira vez em 1979 por Trygve Reenskaug nos laboratrios da Xerox, utilizando SmallTalk. MVC a sigla de Model View Controller, onde temos uma camada denominada Modelo, que so as regras de negcio do sistema, a camada da Viso, que a interface entre usurio e o sistema, e os Controladores, que so utilizados para controlar o fluxo da aplicao. Com o objetivo de separar as camadas, o MVC tem como resultado um cdigo extremamente organizado, facilitando o desenvolvimento e a manuteno de sistemas. Para que o MVC seja implementado necessria a utilizao de uma linguagem de programao com suporte Orientao a Objetos. Portanto, com o melhor suporte do PHP 5 em relao Orientao a Objetos, trabalhar com PHP 5 e MVC uma tarefa simples e eficaz.

1. Design Patterns
Design Patterns o termo em ingls para Padres de Projeto de Software, que nada mais do que uma padronizao no desenvolvimento de software.
Antes de tudo, preciso saber que um Design Pattern um conceito e no uma tecnologia. Sendo assim, no est ligado obrigatoriamente com nenhuma linguagem de programao ou framework de desenvolvimento. Os Design Patterns surgiram com a necessidade dos desenvolvedores de resolver problemas de maneira eficaz. Christoper Alexander estabeleceu na dcada de 70 que os padres de projeto devem ter como objetivo resolver um problema especfico e, para isso, devem conter um nome, um exemplo, um contexto, um problema e uma soluo. Entre os padres mais utilizados no desenvolvimento de software atualmente esto o Factory, com o objetivo de centralizar a criao de objetos, e o Singleton, que faz com que uma classe tenha somente uma instncia ativa. J o Strategy encapsula algoritmos e os representa atravs de uma interface. Outro padro interessante o Template Method, que define uma estrutura abstrata de classes com funcionamento parecido. O MVC vai alm do conceito de Design Patterns, pois define padres para a arquitetura do software, como

2.1. Vantagens de utilizar MVC


Ao desenvolver utilizando MVC, h vrias vantagens em relao ao modelo estruturado. - Reaproveitamento de cdigo Uma das maiores vantagens da Orientao a Objetos o reaproveitamento de cdigo, j que ao modularizar so criadas classes e funes que podem ser utilizadas em vrias partes da aplicao. - Facilidade de manuteno Com uma boa estrutura de diretrios e arquivos relativamente pequenos, encontrar um trecho de cdigo
PHP Magazine - 5a Edio - 17

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

para alteraes se torna uma tarefa simples. - Integrao de equipes e/ou diviso de tarefas Cada integrante da equipe pode trabalhar em uma camada especfica. Por exemplo, um designer pode fazer a camada de apresentao, enquanto programadores trabalham nos controladores e regras de negcio. - Camada de Persistncia independente Utilizando 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 Banco de Dados utilizado pode ser feita sem afetar outras partes da aplicao. Alm disso, h a possibilidade da utilizao de uma biblioteca de BD para que a aplicao se torne portvel a vrios bancos. - Implementao de segurana Uma grande vantagem de utilizar controladores a implementao de segurana, j que todo o fluxo da aplicao inicia e termina em um controlador. Alm disso, h outras partes do sistema na qual a segurana pode ser feita. - Facilidade na alterao da interface da aplicao Para alterar a interface da aplicao no necessrio refazer o sistema, basta aplicar as alteraes na camada de viso. Para facilitar ainda mais, pode ser implementada alguma biblioteca de templates. Alm disso, h outras vantagens como a padronizao do cdigo e o aumento da produtividade pela velocidade do desenvolvimento, entre outros pontos positivos. PHP.MVC O PHP.MVC foi desenvolvido com o objetivo principal de implementar o MVC com PHP utilizando um controlador principal. Teve como base o framework Jakarta Struts, inclusive implementando vrias funcionalidades do Struts, como utilizar XML em sua configurao. -> Verso Estvel: 1.0 -> Gratuito -> Link: http://www.phpmvc.net/

Symphony
O Symphony um framework de desenvolvimento em PHP que proporciona uma arquitetura, componentes e ferramentas para desenvolvedores construir aplicaes Web robustas e complexas mais rapidamente. O Symphony utiliza boas prticas de desenvolvimento Web integradas com bibliotecas de terceiros. -> Verso Estvel: 1.1 -> Gratuito -> Link: http://www.symfony-project.org/

Zend Framework
Desenvolvido pela empresa criadora do PHP, o Zend Framework baseado na simplicidade, boas prticas do desenvolvimento orientado objetos e conta com uma base de cdigo fortemente testado. Tem como objetivos desenvolver sistemas seguros, confiveis e modernos. -> Verso Estvel: 1.5.1 -> Gratuito -> Link: http://framework.zend.com/

2.1. Frameworks que implementam MVC


CakePHP O CakePHP um framework de desenvolvimento de software que utiliza PHP e proporciona uma extensa arquitetura para o desenvolvimento de sistemas com velocidade. Ele utiliza alguns design patterns como MVC e ORM. O objetivo do CakePHP diminuir o custo do desenvolvimento ajudando os desenvolvedores a escrever cdigos menores. -> Verso Estvel: 1.1.19.6305 -> Gratuito -> Link: http://www.cakephp.org/

PRADO O PRADO um framework baseado em componentes para o desenvolvimento de aplicaes Web com PHP. PRADO a sigla para PHP Rapid Application Development Object-oriented, e conta com uma rica documentao e uma grande comunidade. -> Verso Estvel: 3.1.1 -> Gratuito

CodeIgniter O CodeIgniter um framework feito para desenvolvedores que necessitam de uma ferramenta simples e elegante para desenvolver aplicaes Web completas. Uma das maiores vantagens de utiliz-lo a alta performance que ele proporciona. -> Verso Estvel: 1.6.1 -> Gratuito -> Link: http://www.codeigniter.com
18 - 5a Edio - PHP Magazine

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

3. Model
Podemos dizer que a camada Model o corao da aplicao. nela que est a lgica da aplicao, responsvel pelo que a mesma ir realizar. Nesta camada os dados so manipulados e armazenados. Para facilitar ainda mais, esta camada separada em outras trs par-

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

tes: A Entidade, que chamamos de Bean, a camada de Persistncia, chamada de DAO e os arquivos de regras de negcio, que so as Actions. Veremos a seguir cada uma delas.

3.2. DAO
DAO a sigla de Data Access Object, que pode ser traduzido como Objeto de Acesso a Dados. Ele um objeto que prov uma interface abstrata para persistncia de dados, ou seja, um conjunto de funes que fazem a comunicao com os dados, seja em um banco de dados, um arquivo XML ou qualquer outra forma de armazenamento. Para utilizar um SGBD, por exemplo, as consultas SQL sero escritas no DAO, ou ento uma biblioteca de persistncia pode ser implementada nessa camada para facilitar essa comunicao. Uma das grandes vantagens de se utilizar uma camada de persistncia independente a portabilidade de banco de dados que o DAO oferece. Para fazer uma migrao de banco de dados, ao invs de alterar toda a aplicao nos locais onde h comunicao com o banco, basta fazer as alteraes nesta camada. Se uma biblioteca de persistncia estiver sendo utilizada, essa alterao fica ainda mais simples, j que apenas o arquivo de conexo precisa ser alterado. Entre as bibliotecas mais utilizadas esto a EzPDO, o Propel e o PEAR:DB_DataObject. Aps implementado, o DAO pode ser utilizado sempre que for necessria a persistncia de dados. Segue um exemplo de DAO. <? class ProdutoDAO { public function listar() { $sql = "SELECT id, nome, valor FROM produto ORDER BY nome"; $query = mysql_query($sql); $lista = array(); $cont = 0; while ($linha = mysql_fetch_object ($query)) { $lista[$cont] = new Produto(); $lista[$cont]->setId($linha->id)); $lista[$cont]->setNome($linha>nome)); $lista[$cont]->setValor($linha>valor)); } return $lista; } } ?>
Figura 2 Exemplo de DAO

3.1. Bean
Implementando um conceito muito utilizado em Java, os JavaBeans, temos as entidades encapsuladas. A definio de Bean seria um componente de software que pode ser reutilizado vrias vezes. So utilizados para encapsular vrios atributos em um objeto. Na prtica teremos um Bean para cada entidade do sistema. A estrutura de um Bean bastante simples, comeando com a declarao da classe, que tem o nome da entidade, seguido da declarao dos atributos com o modificador de acesso private, e os mtodos setters e getters. Para que a aplicao obtenha maior segurana, deve ser implementado o conceito de Encapsulamento. Com isso, os atributos no podem ser acessados diretamente, j que esto declarados como private, podendo ser acessados somente pelos setters e getters. Um setter um mtodo que segue o padro setAtributo(), e serve para definir o valor de um atributo. J o getter um mtodo que segue o padro getAtributo () e serve para obter o valor de um atributo, sempre que for necessrio utilizar um atributo em um sistema, ser esse o mtodo utilizado. Qualquer validao ou verificao a ser feita em um atributo deve ser implementada nos mtodos setters e getters. a que questes de segurana devem ser implementadas, como forar um atributo a ter um determinado tipo, evitando SQL injection, por exemplo. Segue um exemplo de um Bean. <? class Produto { private $id; private $nome; // ... outros atributos ... public function setId($id) { $this->id = (int)$id; } public function getId() { return $this->id; } public function setNome($nome) { $this->nome = $nome; } public function getNome() { return $this->nome; } // ... outros setters e getters ... } ?>
Figura 1 Exemplo de Bean

3.3. Actions
Os arquivos Actions so arquivos de Ao. nele que se localizam as regras de negcio da aplicao. O arquivo de ao consiste em uma classe com o nome da ao a ser executada e um mtodo execute(), que contm o

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

PHP Magazine - 5a Edio - 19

cdigo que ser executado. Esses arquivos utilizam o Bean e o DAO para realizar persistncia de dados, alm de disponibilizar dados para a camada de Viso. Segue um exemplo de um arquivo de Ao. <? class Listador { public function execute() { Conexao::conectar(); $produtoDAO = new ProdutoDAO(); $lista = $produtoDAO->listar(); $_REQUEST['lista'] = $lista; return "Listar"; } } ?>
Figura 3 Exemplo de Action

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

4.1 AJAX
O AJAX o uso em conjunto de vrias tecnologias promovendo uma tcnica de requisio assncrona muito difundida com a WEB 2.0. Antes de entender o que jax, temos que compreender como funciona a requisio assncrona em pginas WEB. Temos por requisio assncrona tudo aquilo que requisita dados do servidor sem a necessidade de toda a pgina ser recarregada. Applet, Flash e Iframes so exemplos de tecnologias que fazem requisio assncrona. Para entender melhor esse conceito, observe os diagramas abaixo.

4. View
A View, ou camada de viso, a parte da aplicao que comunica e interage com o usurio final, ou seja, uma interface com ele. nela que so implementadas a usabilidade, a interatividade e o layout visual, incluindo a linguagem 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-os ao controller juntamente com qual view ser usada. Com isso, o controller joga o fluxo para a view que transforma esses dados em informao para o usurio. notvel que dessa maneira a camada de viso quase no contm cdigo PHP, apenas as variveis geradas no Model e algum lao de repetio, em listagens. Mas podemos abstrair ainda mais a linguagem PHP da camada de viso utilizando templates. Os templates so modelos, sem contedo, que possuem a apresentao visual de aplicaes dinmicas. Para suprir a pequena necessidade de linguagem no visual (PHP) da view, muitos sistemas de templates utilizam uma linguagem prpria para manipular a exibio dos dados provindos do servidor. Como exemplo, podese citar o Smarty, o sistema de templates mais tradicional para PHP. Independente das implementaes contidas na view, importante observarmos que com o MVC a camada de viso fica to bem separada que pode ser desenvolvida inteiramente por um designer, que no entende de PHP. Ou, ainda, podemos desenvolver duas camadas de viso para uma mesma aplicao: a Web e a Desktop (utilizando PHP-GTK), tornando a aplicao ainda mais portvel.

Figura 4 Fluxo na Web sem requisio assncrona

Figura 5 Fluxo na Web com requisio assncrona

Ao contrrio do que feito normalmente, quando utilizamos requisio assncrona, uma mesma pgina consegue fazer vrias requisies. Isso nos fornece diversas vantagens, como a reduo do trfego na rede e a maior transparncia para o usurio, tornando o sistema semelhante a uma aplicao Desktop. No AJAX a requisio feita atravs do Javascript para um XML que se encontra no servidor. Quando usa-

20 - 5a Edio - PHP Magazine

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

mos AJAX com PHP, o XML formado pelo PHP dinamicamente atravs de algum parmetro que o Javascript passou na requisio. Integrando o AJAX com MVC teremos dois tipos de view: a view que solicita arquivos XML para o servidor e as views que constroem esses arquivos. Para compreender como a requisio assncrona com

//Exemplo de uso ajax("pagina.php", "GET", "categoria=5&produto=1"); Figura 7 Exemplo de funo JavaScript para a requisio.

Javascript funciona, devemos entender os objetos XMLHttpRequest, responsveis por ela. Infelizmente esse objeto ainda no est padronizado, sendo possvel que em navegadores diferentes ele esteja em diferentes escopos. Para sanar essa incompatibilidade o seguinte cdigo 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 Javascript para instanciar o objeto XMLHttpRequest

Observe no cdigo acima que ao evento onreadystatechange atribuda uma funo que verifica se a requisio foi concluda e se a URL vlida. Se sim, coloca o contedo da requisio numa tag com id igual a 'conteudo'. Aps definir o manipulador do evento, a funo ajax configura a requisio com o mtodo open e requisita com o mtodo send, passando os parmetros. Apesar de AJAX utilizar XML, comum chamarem de AJAX toda requisio assncrona feita atravs do JavaScript, que pode ainda retornar HTML, Texto puro, Scripts ou dados em JSON. O exemplo trata um retorno em HTML ou Texto puro que o mais simples. A resposta em script uma string que pode ser transformada em cdigo JavaScript atravs da funo eval(). JSON (JavaScript Object Notation) um formato para serializao de objetos em JavaScript. O PHP 5 possui nativamente funes que serializam/deserializam objetos dele em JSON (json_encode, json_decode). Com isso fcil passar um objeto do PHP para o JavaScript de forma bem simples, utilizando o mnimo possvel de banda. JSON tm se tornado uma excelente alternativa ao XML no AJAX. Para facilitar o uso do AJAX e possibilitar outros recursos da WEB 2.0, podemos utilizar bibliotecas como o jQuery, o MooTools ou o Prototype, ou frameworks como o Dojo, o Rico ou o extJS.

5. Controller
O Controller o controlador da aplicao, ele o responsvel por controlar o fluxo da aplicao e pode tambm implementar segurana. Todas as requisies feitas ao sistema so iniciadas pelo controlador. O usurio acessa o controlador pela URL passando parmetros, que sero utilizados para determinar o fluxo da aplicao. Alm disso, o fluxo da aplicao sempre ser encerrado pelo controlador, por isso, ele se torna bastante til para implementar segurana, como verificaes de nveis de acesso e gravao de logs de acesso. Pode ser utilizado tambm para abrir e fechar uma conexo ao banco de dados, por exemplo.
<? $module = $_GET['module']; $acao = $_GET['acao']; $url = $_GET['module']. "/action/" . $_GET ['acao'] . ".php" ; require_once($url) ; $acao = new $_GET['acao']; $retorno = $acao->execute(); $view = $_GET['module'] . "/view/frm" . $retorno . ".php" ; require_once($view) ; ?> Figura 8 Exemplo de Controlador

Dentre os mtodos do objeto XMLHttpRequest os mais importantes so o open, responsvel por configurar o metodo e a url da requisio e o send, responsvel por enviar a requisio. H tambem alguns atributos que meressem ser comentados: readyState, que representa o estado atual da requisio (variando de 0 no inicializada 4 concluda); responseXML, a resposta em XML; responseText, a resposta em texto; status, o cdigo do status da URL requisitada e o evento onreadystatechange, que chamado em cada mudana de estado do objeto. Abaixo, o exemplo mais bsico de funo 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); }

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

PHP Magazine - 5a Edio - 21

6. Estrutura de Diretrios
Na raiz da aplicao situa-se o controlador principal. Para cada entidade cria-se um diretrio com o nome do mesmo. Dentro de cada entidade, h um arquivo com o nome da entidade, que o arquivo Bean, e o arquivo DAO. Alm disso, h um diretrio Actions, onde se localizam os arquivos de Ao, e por fim o diretrio view, onde so armazenados os arquivos de apresentao, que por padro tem o prefixo frm.

Consideraes Finais
Quando desenvolvemos para Web, temos um desafio maior em tornar a aplicao interativa e com o cdigo organizado, sem misturar Linguagem de Banco de Dados, Linguagem de Programao e Linguagem de Marcao. Neste artigo mostramos uma maneira de usar conceitos e padres que se do muito bem sozinhos e melhor ainda juntos: MVC e AJAX com PHP. Detalhamos o necessrio para criar uma aplicao modular que seja de fcil 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
Figura 9 Exemplo de estrutura de diretrios

7. Fluxo da Aplicao
Na figura seguinte, tem-se o fluxo completo dentre as camadas na execuo normal da aplicao utilizando MVC. Almir Neto - almirneto@gmail.com Almir Neto desenvolvedor da HP Transportes e um entusiasta do PHP + MVC. Foi palestrante no PHP Conference Brasil 2007 alm de ter ministrado palestras e mini-cursos no III FGSL e IV FLISOL-GO.

Otvio Calaa Xavier - otaviocx@gmail.com Entusiasta do Desenvolvimento WEB 2.0, do Software Livre e de Padres para Web, Otvio Calaa Xavier trabalha como analista desenvolvedor na Cmara de Dirigentes Lojistas de Goinia. Ministrou o minicurso "PHP Orientado a Objetos com AJAX" no IV FLISOL-GO e o "Introduo Google Maps API" no FLISOL-DF 2008.

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

22 - 5a Edio - PHP Magazine

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

Edies anteriores
edio 01 - janeiro/2007 (lanamento)
Edio especial de lanamento apresentando a revista comunidade. Os artigos abordam temas relacionados a CMS's, Design Patterns, integrao com SOA e sesses. No final, uma entrevista com Cristian Pedroso.

edio 02 - maro/2007
Segunda edio com um acervo maior de artigos. Nesta edio so apresentados alguns nmeros e comentrios da repercusso do projeto. Os artigos abordam desde CMS, camadas de persistncia at uma avaliao de frameworks. Ao final, Via6 e Rec6 so 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 PHP Road 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. A equipe apresenta um pequeno tour em trs IDEs conhecidas da comunidade.

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

www.phpmagazine.org.br

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

PHP Magazine - 5a Edio - 23

eventos

Os nmeros do

FISL 9.0
Nesta seo apresentamos alguns nmeros do frum que a cada ano obtm mais expresso dentre as diversas comunidades de tecnologia.
O evento reuniu mais de 7,4 mil participantes de 21 pases no Centro de Eventos da PUCRS, o maior pblico desde 2000, quando foi realizado o primeiro fisl. Nos trs dias do evento houve debates, palestras, troca de informaes e experincias, entre grupos de usurios, desenvolvedores, empresas pblicas e privadas que compareceram como participantes, expositores ou patrocinadores. Foram 257 palestras, com nomes nacionais e internacionais, que lotaram todas as oito salas destinadas aos encontros. Para a coordenao do fisl9.0, esta edio com pblico recorde mostra a importncia que o software livre vem conquistando no mundo todo e como o compartilhamento de informaes pode beneficiar a toda a sociedade. "Nosso desafio agora ser organizar o evento do ano que vem, quando pretendemos marcar de forma ainda mais forte a presena do software livre na vida das pessoas, em funo dos 10 anos do fisl", diz Sady Jacques, coordenador geral do Frum. A meta da Associao Software Livre.Org, organizadora do fisl, chegar a 10 mil participantes em 2009. "Sabemos que um grande desafio, mas estamos nos preparando para isso", afirma Jacques. Alm do pblico recorde, o fisl9.0 teve a participao de empresas como Provncia Marista; UOL; Terra; Telefnica; 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 do Municpio de Porto Alegre (PROCEMPA); Companhia de Informtica do Paran (CELEPAR); Empresa de Tecnologia e Informaes da Previdncia Social (DATAPREV); Servio de Processamento de Dados (SERPRO); Caixa Econmica Federal; Banco do Brasil; Secretaria de Educao a Distncia (SEED); Ministrio da Cultura; Ministrio da Cincia e Tecnologia; Ministrio da Educao; Ministrio do Planejamento, Oramento e Gesto; Propus; Locaweb; Servio Nacional de Aprendizagem Comercial (SENAC); Diginet; iSafe; Kroma Informtica; Logins; ProDesk; ArgoHost.net; Brasil Telecom; Powerlogic; Minuano; Cobra Tecnologia; Casa Brasil; Petrobrs; Correios; Ministrios das Comunicaes; Ministrio da Sade; Instituto Nacional de Tecnologia da Informao (ITI); Governo do Paran; Companhia de Processamento de Dados do Estado do Rio Grande do Sul (PROCERGS); Sindicato das Empresas de Informtica do Rio Grande do Sul (SEPRORGS); O fisl contou com apoio das empresas: Baguete; A Rede; Instituto Nokia de Tecnologia (INdT); Associao dos Jovens Empresrios de Porto Alegre (AJE); Sindicato dos Bancrios; Instituto Projetos Pesquisas; Tangalomango; e Centro de Processamento de Dados (CPD) da Universidade Federal do RS (UFRGS). Participaram da Mostra de Solues as empresas: Solis Cooperativa de Solues Livres; Livraria Tempo Real Informtica e Negcios; ZOPING; Trolltech ASA; Moradia e Cidadania; Education Technolog; Red Hat Brasil; Sociedade de Educao Ritter dos Reis; OpenS Tecnologia Ltda; Escola Alcides Maya; Linux Magazine; Unicamp; Universidade Federal de Pernambuco; ThreePointsWeb; NetScience; ParanaCidade; BrOffice.org; LM2 Consulting; PostgreSQL; DBSeller Servios de Informtica; Ory Soluctions Group; FAURGS; Centro de Empreendimentos do Instituto de Informtica da UFRGS; CONEXUM; DFL; SOL7; Laboratrio de Estudos Cognitivos (LEC); e Projeto 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 representados no fisl. Perfil dos participantes: 24% so estudantes e 63% so profissionais e empresrios de TI;

Patrocinadores: 41 Mostra de Solues: 28

24 - 5a Edio - PHP Magazine

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

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 2 outros pases Uruguai e Paraguai) Maior caravana: So Paulo, com 47 participantes Mais distante: Manaus ;

Grupos de Usurios: 48 (vindos de 8 estados brasileiros 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 4 participantes) Insanifying = 18 classificados (6 equipes de 3 participantes)

Fonte http://fisl.softwarelivre.org/9.0/www/node/532

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

PHP Magazine - 5a Edio - 25

review
Por Helton Ritter

9 Frum de Software Livre e

muito PHP
A linguagem de programao PHP marcou presena no ltimo Frum Internacional do Software 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 de 7.000 pessoas, entre entusiastas, desenvolvedores, usurios, designers, expositores e voluntrios. E, como no poderia deixar de ser, a PHP Magazine esteve l e conferiu tudo de perto para voc.
Ao todo foram trs dias de evento que deixaram um desejo de queremos mais em 2009. Muito bem organizada, as apresentaes foram divididas em 14 trilhas, com uma delas chamada Desenvolvimento: PHP, que contou com 5 palestras de pessoas ilustres da comunidade PHP do Brasil e do exterior. Presente do incio ao fim, a equipe PHP Magazine no podia deixar de registrar as palestras de nosso interesse especfico. Agradecemos os autores pelo incentivo e colaborao para este resumo, bem como a colaborao de Fernando Fischer e Ubiratan de Carvalho. Infelizmente, no conseguimos acompanhar a palestra Desenvolvendo portais com o Drupal: Estudo de caso dos portais dos Democratas. Fica aqui o nosso pedido de desculpas. A seguir, um apanhado dos principais pontos abordados em cada apresentao. es com as mais diversas responsabilidades. O incrvel que nem por isso a linguagem deixou de ser fcil. Hoje PHP o front-end de 80-90% das pginas da Internet. Com aplicaes grandes de alta responsabilidade, iniciam-se anlises antes inviveis, comea-se a pensar em otimizao mxima do script, em devolver o mnimo possvel de HTML para o cliente, em analisar em detalhes e medir os tempos do trfego HTTP e da resposta do servidor, do processamento de cada binrio ou biblioteca que estiver envolvida. Aplicaes de grande responsabilidade exigem cuidados muito especficos. Para ajudar-nos existe o YSlow, que um complemento para a extenso FireBug que roda no Mozilla Firefox. O YSlow foi desenvolvido pela Yahoo! para facilitar a anlise e, com isso, saber em que pondo agir buscando o melhor tempo de resposta. Precisamos de mudanas em nossos hbitos de programar. A simples substituio de require_once por require j representa uma melhora de performance, pois ser um processamento a menos. Por isso, tenha um olhar clnico e faa da maneira mais simples possvel. Evite o uso de frameworks que tendem a ser grandes e complexos quando no so necessrios. Servios de alta responsabilidades ou apenas sistemas complexos tendem a ter variveis em to grande nmero que em algum momento ficam incontrolveis e neste descontrole pode-se abrir uma brecha na segurana. Por isso, never click on a link! (nunca clique em um link!), pois voc internauta no sabe o que processado no servidor e no seu navegador no momento daquele clique. Na realidade no h como garantir a segurana. Quando se abre uma URL estamos sujeitos a scripts que agem nos bugs do nosso navegador. Estamos sujeitos a sermos usados para propagar links maliciosos. A soluo novamente simples: filtrar par garantir que os dados que estamos recebendo realmente so os que esperamos receber.

Large Scale PHP


Autor: Rasmus Lerdorf Rasmus Lerdorf, que desenvolveu a primeira verso da linguagem de programao PHP, apresentou neste FISL um pouco da histria do PHP, passando para a otimizao de scripts e do ambiente do servidor em geral e por ltimo focou em segurana, demonstrando de modo prtico um ataque de XSS. No estado vicioso de nosso trabalho acabamos no lembrando como as coisas comearam, reclamamos da falta de padronizao das funes, da capacidade ou no da orientao a objetos, se deveriam ou no deixar de existir os alis para as funes... Imagine que o incio disso tudo foi l por 1994 ou 1995. Naquela poca a realidade era outra: outro pblico com acesso a Internet, outros softwares para acessar as pginas. A internet era texto e poucas responsabilidades com dinamicidade. Com o passar do tempo as exigncias aumentaram, a linguagem evoluiu muito e de modo descentralizado, dificultando vrias normatizaes e resultando em fun-

26 - 5a Edio - PHP Magazine

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

Lio final: Faa o mais performtico que puder, garantindo a integridade do sistema e o mximo de segurana para o usurio. Rasmus deixou os slides no seguinte endereo: http://talks.php.net/show/fisl08 .

Prevenindo XSS: Execute apenas o SEU cdigo


Autor: Er Galvo Abbott Um dos assuntos mais destacados no momento so ataques por XSS, ou seja, injeo de cdigos dentro de nossa aplicao. Er Galvo Abbott, que j havia falando sobre segurana no FISL, este ano voltou a expor o assunto. Galvo tambm j publicou na 3 edio da PHP Magazine, no deixe de conferir Segurana no PHP Os 6 requisitos mnimos. Ataques de XSS so tentativas de embutir, ou seja, de fazer nossa pgina executar cdigos (normalmente JavaScript e HTML) de forma intrusiva, causando ou danos visuais ou, na pior hiptese, fazendo processar comandos invisveis ao usurio, mas que agem de modo obscuro. Novamente a soluo simples: garantir-se de que os dados que recebemos ou enviamos esto no formato que esperamos que estejam. Tal regra vale para dados vindos por $_COOKIE, $_SESSION, $_POST, $_GET ou $_REQUEST. Tambm devem ser tratados os dados originados do banco de dados e que chegam at nossa aplicao Costumamos nos preocupar com os dados que recebemos por parte do usurio, mas acabamos esquecendo de tratar os dados que so inseridos em nossa aplicao vindos do banco de dados e simplesmente exibidos. Se esses dados tiverem scripts, eles provavelmente sero executados e podem comprometer o sistema ou dados. Segundo Galvo, a incapacidade tcnica no o nico problema. O que ocorre que o erro de segurana identificado, mas no corrigido por falta de tempo e por menosprezarmos os danos que podem ser causados. Cabe nesse momento um pouco mais de compromisso nos trabalhos j finalizados por parte do desenvolvedor. Isso no especifico para PHP, pois o problema genrico. Os slides esto no site www.galvao.eti.br em keynotes. do autor: http://

Duro de Errar 5.0 - Tratamento, Controle e Configurao de erros em PHP 5


Autor: Marcelio Leal Marcelio Leal trouxe um assunto que ningum quer deparar-se: os erros, as excees e os bugs em nossos programas PHP, junto a isso algumas configuraes e mtodos do PHP para melhorar sua visualizao e gerenciamento. Apresentou-nos os nossos direitos. O direito 0 diz que devemos ter a liberdade de errar e conseguir entender o erro. Nesse ponto comentou-se que o PHP muito bom, pois indica de forma clara qual foi o erro e onde que ele ocorreu. No arquivo php.ini h algumas diretivas relacionadas a erros. Tais diretivas devem ser diferenciadas em ambiente de desenvolvimento, no ambiente de testes e no ambiente de produo. No ambiente de desenvolvimento mostra-se todos os erros, warnigs e notices, alm das possveis funes que depreciaro e incompatibilidades futuras. Temos assim uma riqueza de informaes que nos auxilia a fazer o cdigo da maneira mais perfeita possvel. No ambiente de produo a recomendao no mostrar erros e guard-los em logs, ou trat-los por funes especializadas. A customizao ainda depende da experincia do desenvolvedor. Um desenvolvedor com mais experincia pode configurar para que vejam apenas os erros que lhes so interessantes. Essa uma flexibilidade do PHP que pode ser explorada. O bloco try/catch foi reforado, pois, embora seja de um uso muito simplificado, pouco aplicado na prtica. Sabemos que os erros da maneira original apresentam-se sem sentido algum para o usurio e, para piorar, pode se tornar at um problema de segurana, dependendo de como se apresenta o erro em ambiente de produo. Afinal, nada como poder reagir diante de uma situao de erro. H ainda a triger_error em que podemos criar erros em 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 vezes as rotinas, ou melhor, usar o prprio computador para testar a pgina. Nesse momento apresenta-se o phpUnit e o Selenium, ambas ferramentas que permitem automatizar testes. Marcelio tambm disponibilizou os slides em http:// marcelioleal.wordpress.com/2008/04/22/duro-de-errar50/ .

Implementando Enterprise Patterns em PHP


Autor: Pablo Dall'Oglio Pablo DallOglio brincou que contava sua idade pela quantidade de participaes na FISL e falou de um assunto que muito nos interessa: os patterns de acesso a dados. Em sua palestra foram comentados e demonstrados os principais modelos. A atualidade corporativa requer que o desenvolvedor conhea alguns nomes que cercam a rea. Conhecimento importante, sem dvidas, pela objetividade que proporciona, uma vez que a regra de negcio no precisa

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

PHP Magazine - 5a Edio - 27

ser explicada, basta ser denominada, por j ser um padro. Padro este que, por vezes, usamos e no sabemos. De forma simplificada, um padro criado quando uma determinada tarefa ou modo de resolv-la usado por mais de uma vez. Objetiva-se, ento, que seja aplicvel sempre que aquela situao ocorrer. Design patterns no inveno da rea de informtica. Os padres demonstrados favorecem o uso do modelo MVC, separando a persistncia da camada visual e dos controles. No caso usamos bancos de dados relacionais. Ento, como fazer para que um padro orientado a objeto seja usado em um banco de dados que no seja? A soluo colocar nas classes as regras de negcio e separar at nas classes de persistncia o que diz respeito direto ao banco de dados e o que so regras. Neste momento entra o conceito de gateways. Os patterns apresentados foram: Table Data Gateway, Row Data Gateway, Active Record, Layer Supertype e o Repository Pattern. Os padres foram apresentados partindo-se das premissas mais simples at se chegar

em um modelo aplicado que realmente prov flexibilidade e organizao do cdigo-fonte. Os slides esto disponveis no site do Pablo Pablo DallOglio: http://www.pablo.blog.br/talks. Recomendase a leitura do livro do autor: PHP Programando com Orientao a Objetos.

Concluses
Com a migrao de softwares desktop para internet, tentando aproveitar-se do ambiente colaborativo, h cada vez mais aplicaes com necessidade de alta performance, escalabilidade, disponibilidade e segurana. O site virou aplicao e a rede de pesquisa da ARPANET virou uma oportunidade para negcios. Em geral, as palestras do frum na rea de PHP no trouxeram novidades, mas todas elas focaram na qualidade. Que no prximo FISL possamos ver os resultados destes esforos!

Helton Eduardo Ritter - heltonritter@gmail.com Bacharelando 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.

Visite nosso Portal

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

www.phpmagazine.org.br

28 - 5a Edio - PHP Magazine

Exemplar do assinante: 011700 - Flvio Marcos de Moraes <flavio2m@gmail.com>

Você também pode gostar