Você está na página 1de 28

PHP Magazine - 5a Edio -

sumrio

No esquecer PHP-GTK
Sombra no fundo
Da imagem SQL Injection
Arquitetura

editorial
Apresentao Caixa de Entrada
Equipe 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


apresentao
Prezado leitor,

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

Nesta edio contamos com artigos em trs reas distintas. Leandro Schwarz, que participou em todas as edies 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 vulnerabili-
dades 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 ati-
vidades 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 www.phpmagazine.org.br
Ricardo Arago

Projeto grfico
Flvio Zacharias Fagundes Comercial
Ricardo Arago comercial@phpmagazine.org.br

Reviso tcnica Contato/Suporte


Ricardo Arago da Silva contato@phpmagazine.org.br
Flvio Zacharias Fagundes
Helton Ritter
Marketing
Reviso - Lngua Portuguesa
mkt@phpmagazine.org.br
Camilla Carvalho, camilla@phpmagazine.org.br

PHP Magazine - 5a Edio - 3


caixa de entrada
Submisso de artigo
Primeiramente gostaria de parabeniz-los pelo excelente trabalho e manifestar meu to-
tal apoio. Sou desenvolvedor PHP e trabalho em uma instituio de segurana/
insegurana da informao. Constru um manual de polticas e prticas de programao
segura em PHP (que tambm serve para outras linguagens voltadas pra Web) e gostari-
a de divulgar o meu trabalho. Como extenso, pois possui exemplos prticos detalha-
dos e informaes sobre as diversas vulnerabilidades, sugiro uma coluna na PHP Maga-
zine sobre programao segura, onde a cada edio seria publicado um artigo tratando
de uma determinada vulnerabilidade.
Ismael Rocha :: Braslia - DF
Recebemos este e-mail h algum tempo e trocamos vrias mensagens com o leitor. Is-
mael demonstrou-se realmente interessado, desenvolvendo um tema e, aps alguns fe-
edbacks, apresentamos seu artigo nesta edio. Nosso muito obrigado pela sua participa-
o. Que sirva de exemplo aos demais leitores.
nado ao tema.
Sugesto
Acompanho a revista desde a primeira edio. Quero dar Novos Colaboradores
os parabns pelas matrias que tm me ajudado muito. J venho acompanhando todo o trabalho de vocs. Achei
Gostaria de pedir uma matria sobre PHPReports, pois muito interessante o surgimento da PHP Magazine. Li
ele um utilitrio de relatrios muito eficaz. Eu mesmo todas as edies e fiquei muito encantado com todas. A
serei o mais beneficiado com isso, pois tenho muitos quarta edio est tima. Tenho experincia de quatro
relatrios para desenvolver e pouco conhecimento no anos com a Linguagem PHP e interesse em colaborar.
assunto. Que procedimentos devo tomar?
Leandro Coelho Josu Camelo dos Santos :: Anpolis-GO

Sugesto anotada, Leandro. Este tema sempre do inte- Estamos sempre buscando pessoas interessadas em co-
resse de todos, mas infelizmente at o momento no foi laborar. Voc pode participar submetendo algum artigo
submetido para a revista. Aproveitamos a oportunidade de seu interesse ou integrando-se a nossa equipe de
para comunicar que iniciantes tambm podem contribuir colaboradores, atividade que deve ser assumida como
com artigos, pois nossa equipe est disposta a orient- um compromisso. Em breve estaremos disponibilizando
los na pesquisa e desenvolvimento do tema abordado. para todos os interessados um documento de diretrizes,
Acreditamos que a viso de um iniciante, bem como o onde ficar definida a forma de participao da equipe
empenho em publicar o trabalho e contribuir com a co- da revista.
munidade, servir de modelo a ser seguido pelos de-
mais. Interesse em participao
Estou interessado em ajudar a revista. Eu poderia escre-
Mais sugestes ver sobre integrao do Adobe Flex com o PHP. O que
Sou pesquisador na rea de percepo auditiva e udio acham?
digital. Tenho trabalhado com PHP h algum tempo e Ricardo Cerqueira :: Caruaru-PE
estou trabalhando com projetos na rea de percepo
auditiva e e-learning com aplicaes browser-based. Fica Estamos aguardando sua participao, Ricardo! E, como
a sugesto de um artigo sobre como construir aplicaes sempre, nos colocamos disposio para auxili-lo no
Web com PHP, usando mdulos e templates na forma que for necessrio Basta entrar em contato.
que o Joomla ou o PHPNuke fazem. Parabns pela revis-
ta!!! Elogios
Rael Toffolo Parabns a toda equipe pelo belo trabalho!
Raquel Dezidrio Souto
Agradecemos sua participao, Rael! Toda sugesto
bem-vinda. Na segunda edio apresentamos um artigo com grande satisfao que recebemos suas mensa-
sobre a utilizao do Mambo, um gerenciador de conte- gens de agradecimento e apoio. Para quem desconhece:
do muito semelhante ao Joomla. Que sua mensagem a Raquel participou da segunda edio da revista com o
sirva de incentivo para a submisso de um artigo relacio- artigo PHP nas Geocincias e, desde ento, tem acom-
panhado 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


chamadas

Quem vem palestrar?


O que o CONAPHP? Como demonstrao da sua fora e capacidade de orga-
CONAPHP significa COngresso NAcional de PHP. um nizao, a comunidade de PHP do Brasil est trazendo
grande evento de PHP que consiste em vrias palestras para este evento 2 palestrantes internacionais, para a-
de PHP apresentadas por palestrantes nacionais e inter- lm de vrios outros nomes conhecidos da cena de PHP
nacionais reputados. do Brasil.

Quando? Andrei ZmievskiAndrei Zmievski um reputado de-


O CONAPHP 2008 vai decorrer nos dias 18 e 19 de Outu- senvolvedor no ncleo de PHP. Ele mais conhecido por
bro. ter sido o criador do sistema de templates Smarty e pela
extenso de criao de aplicaes desktop PHP-GTK.
Onde?
O CONAPHP 2008 est inserido no CONISLI 2008. O CO- Este ano ele vem falar do PHP 6, nomeadamente da
NISLI um evento sobre Software Livre muito popular maior mudana da qual ele foi o principal arquiteto: su-
no Brasil que sempre teve a forte presena da comuni- porte nativo a Unicode. Este recurso vai facilitar muito o
dade de PHP desde 2005. Este ano a comunidade de desenvolvimento de aplicaes internacionalizadas em
PHP do Brasil se empenhou para organizar no CONISLI que o texto usa alfabetos distintos dos usados na Europa
um grande evento de PHP com o nome CONAPHP. e Amricas, como por exemplo os usados nos paises da
O CONISLI 2008 ter lugar nas da FIAP - Faculdade de sia, Leste Europeu, tais como Rssia, China, Japo,
Informtica e Administrao Paulista - em So Paulo Coreia, etc..
com endereo Av. Lins de Vasconcelos, 1264, bairro Acli-
mao. Csar RodasCsar Rodas o outro palestrante inter-
nacional convidado. Apesar de ser ainda um jovem uni-
Quem? versitrio que estuda no Paraguai, Csar j participou
em atividades dignas de grande destaque, como o fato
Quem melhor conhece os interesses e necessidades da
de ter sido o vencedor do PHP Programming Innovation
comunidade de PHP, so os prprios membros da comu-
Award de 2007 organizado pelo site PHPClasses.org.
nidade. Por isso, o CONAPHP organizado exclusiva-
mente por membros bem ativos da comunidade de PHP Neste evento Csar vir falar sobre o seu mais recente
Brasileira. trabalho de destaque incluido na iniciativa Google Sum-
mer of Code (GSoC). Trata-se do desenvolvimento de
O tamanho da comunidade de PHP no mundo est esti- recursos avanados para o popular sistema de blogs
mado em 4,5 milhes de profissionais que trabalham no WordPress que permitem lidar com arquivos de conte-
desenvolvimento e manuteno de mais de 20 milhes do de grande porte em sistemas mais apropriados para
de sites. A comunidade de PHP no Brasil tem cerca de esse efeito, como o YouTube, Amazon S3, Google Pica-
5% do total global, portanto so mais de 200.000 profis- sa, etc..
sionais 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 informa-
es sobre o evento para contato@phpmagazine.org.br , que teremos prazer em contribuir com a divulgao.

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 lingua-
gem PHP como ferramenta de auxlio difuso de pesquisas acadmicas. Sendo as-
sim, o artigo pretende um breve esclarecimento sobre o uso da linguagem para a di-
fuso da cincia e tecnologia no Brasil e no mundo.

O objetivo deste artigo no desmerecer linguagens 1. Transporte de plasma (Itlia 2003)


de programao como as linguagens C, C++ ou Delphi, Foi desenvolvido um equipamento para estudar o
e nem as linguagens que j so muito utilizadas para transporte de plasma, o aquecimento do plasma e a cor-
este fim, como a linguagem Java. O objetivo principal rente na presena do aquecimento adicional ocasionado
deste artigo mostrar e incentivar a utilizao da lingua- pela radiofreqncia. As descargas de plasma duram em
gem PHP como ferramenta para a difuso do conheci- torno de 1,5 segundos e, em modo normal de operao,
mento cientfico. um experimento realizado a cada 20 ou 25 minutos.
Grande parte dos programadores em PHP utiliza a Devido natureza experimental do equipamento e da
linguagem como suporte busca e populao de bases complexidade do fenmeno envolvido, a confiabilidade
de dados. Pode-se verificar tal fato com uma simples do experimento obtida com a validao manual de ca-
busca na Internet por scripts em PHP sobre temas como da experimento por meio da verificao da validade de
login de cliente, loja virtual e contador de visitas. O cada medio e da procura por falhas nos sensores.
nmero de resultados ultrapassa em muito a busca por Considerando-se que cada experimento gera entre 1.200
qualquer script relacionado a calculadoras, grficos ma- e 2.000 medies, grande quantidade de tempo e recur-
temticos e similares. sos humanos deve ser alocada para a validao de cada
A razo incontestvel para este fato o uso muito experimento.
mais difundido de lojas virtuais e ferramentas de e- Para automatizar o sistema, uma rede neural artificial
commerce do que das ferramentas matemticas. At foi treinada para validar cada experimento, possibilitan-
porque, o mercado de trabalho dos programadores PHP do que mais experimentos possam ser realizados em um
est voltado para este nicho. mesmo dia, com custos mais baixos. A rede neural de-
O que cabe aos programadores de PHP saber que a senvolvida roda em um servidor LINUX RedHat e arma-
linguagem tambm utilizada dentro do meio cientfico zena os dados em um banco de dados relacional MySQL.
como ferramenta de interface entre bases de dados e O ncleo da validao do experimento foi feito em MA-
pesquisadores, possibilitando que experimentos cientfi- TLAB 6.
cos sejam realizados de forma mais eficaz. Os dados armazenados no banco de dados podem
Sero apresentadas sete aplicaes da linguagem ser acessados pelos usurios por meio de uma interface
PHP no meio acadmico. Todas foram publicadas em Web. A interface foi desenvolvida em navegadores da
revistas de divulgao cientfica, nacionais e internacio- Internet por apresentar-se mais leve que os softwares
nais. Um breve resumo de cada aplicao ser feito. usuais. A interface foi desenvolvida em PHP 4.1.2, e ro-
da em servidor Apache 1.3.12.

6 - 5a Edio - PHP Magazine


Atravs da interface Web possvel detectar a funcio- sas bases de dados em um mesmo grfico, com cores
nalidade do sistema atravs de uma visualizao grfica diferentes para cada curva, permitindo a sua compara-
baseada nos resultados de validao de um dado experi- o. As escalas, os ttulos e os eixos X e Y podem ser
mento. Um esquema de caixas coloridas permite identifi- escolhidos pelos usurios de maneira simplificada. Os
carem-se sensores falhos, que aparecem em uma cor eixos podem ser exibidos em escala linear ou logartmi-
diferenciada. Clicando-se em cima de cada caixa, uma ca, pois os grficos em escala logartmica apresentam a
janela pop-up surge com os dados e a localizao do informao de maneira mais eficaz para sesses de bai-
sensor. xa energia. Os grficos podem ser salvos em formato
Postscript ou imagens GIF no computador do usurio,
Outra funcionalidade do sistema permite que o
para visualizao posterior ou impresso. Os grficos
usurio procure no banco de dados por experimentos
disponveis esto no formato de grficos 2-D, entretanto,
arquivados de qualidade, fornecendo os dados do ex-
grficos 3-D sero desenvolvidos para visualizao em
perimento que interessem ao pesquisador. Os usurios
perspectiva das distribuies angulares versus energia
tambm podem selecionar um subconjunto de dados
incidente ou distribuies de energia secundrias versus
arquivados, especificando um sensor [Buceti, 2003].
energia incidente [Fan, 2004].
2. Reaes nucleares (China 2004)
3. Mapeamento gentico (Sua 2004)
Os dados nucleares compreendem tanto as proprie-
Um grande desafio na biologia atual a determina-
dades do ncleo dos tomos, bem como as leis funda-
o da funo gentica em larga escala. Os padres es-
mentais que regem as iteraes nucleares.
tabelecidos e o vocabulrio controlado facilitam a inte-
Embora alguns dos institutos nucleares, empresas e grao dos dados experimentais com o trabalho compu-
departamentos das universidades chinesas tenham cons- tacional. As bases de dados estruturadas e as ferramen-
trudo suas prprias bases de dados e ferramentas, no tas de busca possibilitam meios de caracterizar a funo
havia uma base de dados chinesa disponvel na Internet de um dado gene.
at 2001.
O seqenciamento gentico completo da planta orna-
As maiores bases de dados internacionais armazenam mental Arabidopsis foi alcanado no ano de 2000 e per-
os dados em arquivos de texto em formato ASCII com mitiu monitorar a expresso desta planta em escala ge-
padronizaes diferentes, por exemplo, os formatos Eva- ntica usando microarrays. O array ATH1, por exemplo,
luated Nuclear Data File (ENDF) e Evaluated Nuclear S- representa aproximadamente 23.750 genes da Arabidop-
tructure Data File (ENSDF) Estes formatos so, em geral, sis. Milhares de arrays foram processados desde ento.
complexos para usurios no-especializados, o que apre-
A combinao mltiplas bases de dados gera dvidas
senta grandes dificuldades na verificao e processa-
quanto sua compatibilidade, em particular quando se
mento de arquivos grandes.
comparam dados de diferentes organismos.
O sistema desenvolvido, chamado NDOS (Nuclear
Um sistema on-line foi desenvolvido para facilitar a
Data On-line Services), inclui um repositrio de dados
descoberta da funo gentica, compreendendo uma
central utilizando um banco de dados relacional e permi-
base de dados de expresso gentica e um conjunto de
te a busca interativa dos dados atravs de tecnologia
ferramentas de busca e anlise, chamado GENEVESTI-
baseada na WEB.
GATOR. O GENEVESTIGATOR foi desenvolvido como
O sistema NDOS tambm pode reconstruir facilmente sendo uma ferramenta on-line amigvel para anlise de
os dados nucleares em formatos padronizados, tais co- dados de expresses genticas em larga escala. Consiste
mo ENDF e ENSDF, a partir do repositrio central de da- de uma base de dados MySQL e um servidor rodando
dos. Esta caracterstica oferece flexibilidade para compa- scripts em linguagem PHP.
ra dados proveniente de bases de dados diferentes e o
O GENEVESTIGATOR acessado gratuitamente para
processamento on-line dos dados.
todas as instituies acadmicas. Uma vez que a base de
O sistema roda em plataforma Linux e foi desenvolvi- dados possui tanto dados pblicos quanto confidenciais,
do em PHP com a base de dados MySQL. A base de da- um sistema usurios com perfil dual fio criado para ger-
dos e os servios principais do sistema NDOS residem enciar o acesso de usurios de perfil pblico e privado.
em uma estao de trabalho PC, mantido pelo Institute Todos os usurios devem se registrar e iniciar uma
of Heavy Ion Physics (IHIP) da Universidade de Pequim. sesso com usurio e senha. Os dados coletados para
A maioria das funes de gerenciamento da base de da- registro so utilizados apenas para administrao da
dos, tais como a adio de dados, podem ser realizados base de dados e para aperfeioar o funcionamento do
remotamente. sistema. As informaes pessoais no so compartilha-
das com terceiros [Zimmermann, 2004].
Uma ferramenta para plotar grficos foi desenvolvi-
da utilizando a biblioteca JPGraph para PHP. A ferramen-
ta permite que o usurio plote grficos com os dados
4. Tele-consulta mdica (Turquia 2004)
provenientes da base de dados ou dos dados processa- A equipe mdica de regies remotas tem grande difi-
dos atravs de alguma das outras ferramentas do siste- culdade para conseguir a opinio de mdicos especialista
ma. Pode-se plotar grficos utilizando dados de diver- em uma determinada rea, principalmente porque estes,

PHP Magazine - 5a Edio - 7


normalmente, trabalham nos grandes centros urbanos. isto, foi utilizada a biblioteca grfica GD uma bibliote-
Portanto, os pacientes de zonas remotas devem viajar ca escrita em ANSI C, gratuita que permite a criao de
para os centros urbanos procura de opinio especiali- imagens de forma dinmica.
zada.
Como caracterstica adicional do sistema, a interface
A telemedicina a transferncia de dados mdicos grfica permite ao usurio converter a imagem para uma
eletrnicos, como imagens de alta resoluo, sons, v- matriz binria antes da transmisso para o cliente. Este
deos e sinais bioeltricos, entre duas regies. Sistemas processo fornece uma matriz de 256 nveis de cores para
de tele-consulta so utilizados por mdicos para consul- cada pixel, permitindo seu download para o computador
tar pacientes de regies remotas em tempo real ou em do cliente, onde ferramentas de processamento digital
momentos mais convenientes ao mdico. de sinais podem ser utilizadas. Alm de gerenciar texto e
imagens, o sistema tambm suporta dados multimdia,
As clnicas de tele-consulta so equipadas de forma a
como filmes de ultra-sonografia, tomografia computado-
realizar os exames bsicos, como presso sangunea,
rizada e ressonncia magntica e udio de sons carda-
temperatura corporal, freqncia cardaca, pesagem etc.
cos e respiratrios, reproduzidos em uma janela do na-
Equipamentos de ECG, EEG, mquinas de raios-X e ultra
vegador [Kuntalp, 2004].
-sonografias tambm podem ser fornecidos. As clnicas
empregam clnicos gerais, enfermeiras e tcnicos especi-
5. Identificao de espcies (ustria
alizados na utilizao e manuteno dos equipamentos e
computadores. Os mdicos locais e as enfermeiras utili- 2005)
zam o sistema para enviar os dados dos pacientes para O gnero de fungos Trichoderma (Hypocreales, As-
uma base de dados central. comycota) contm fungos freqentemente encontrados
Os mdicos especialistas localizados nos grandes em madeira em decomposio e no solo, compondo a
complexos mdicos utilizam o sistema para monitorar os maior parte da biomassa total dos fungos. Algumas es-
pacientes atravs de pginas de Internet. Aps a anlise pcies deste gnero so economicamente importantes
dos dados enviados pelas clnicas locais, os especialistas na produo de enzimas industriais, antibiticos e como
podem enviar seus laudos pelos meios de comunicao bioagentes aplicados no controle dos patgenos de plan-
convencionais (telefone, fax, e-mail etc.). tas.
O sistema foi desenvolvido em PHP, principalmente As espcies Longibrachiatum so conhecidas como
pela gratuidade da linguagem. Outras vantagens da lin- patgenos oportunistas de mamferos imuno-
guagem para o sistema incluem a independncia de pla- comprometidos, incluindo seres humanos e diversos indi-
taforma (rodando em sistemas UNIX, Windows e Macin- vduos da espcie so encontrados como contaminantes
tosh com apenas poucas modificaes no cdigo), a ve- de ambientes domsticos.
locidade, o baixo uso de memria, a facilidade de apren- Estas diversas implicaes dos Trichoderma na socie-
dizado, a interface intuitiva (permitindo que os coman- dade humana tornam a identificao das espcies um
dos PHP sejam inseridos por entre as tags HTML) e a tpico de grande importncia.
grande difuso e suporte na comunidade open-source.
Alm destas vantagens, a PHP uma linguagem robus- Devido homoplasia, a determinao morfolgica
ta, possuindo caractersticas avanadas de programao. difcil mesmo para especialistas, o que tem freqente-
Diferente de outras linguagens, a PHP permite a integra- mente resultado no uso incorreto do nome das espcies
o com bibliotecas externas. associadas produo de enzimas, ao biocontrole de
patgenos, infeco humana e formao de metab-
Um problema em potencial pertinente transmisso litos secundrios.
de dados mdicos a segurana. Para garantir o sigilo e
a integridade dos dados, os usurios devem acessar a O artigo apresenta um sistema de codificao de bar-
base de dados atravs de usurio e senha. Uma vez au- ras baseado nos oligonucleotdeos da cadeia de DNA
tenticado, uma sesso criada para armazenar os dados como um mtodo rpido para a identificao das esp-
do usurio e um cookie criado na mquina do cliente. cies Hypocrea e Trichoderma. O mtodo originou um
Na sesso esto armazenados o usurio e a senha, en- sistema chamado TrichOKey v 1.0, com interface Web
tretanto, o endereo de IP, o tempo de acesso e a infor- amigvel baseado em uma biblioteca com poucas, po-
mao do navegador tambm podem ser armazenados. rm essencialmente invariveis e especficos entre esp-
Os dados da sesso so codificados atravs da funo cies, seqncias de nucleotdeos dos loci ITS1 e 2.
HASH md5(), que possui taxa de coliso 2-128, o que A biblioteca de marcadores de oligonucleotdeos foi
um nmero bem baixo. Quando o usurio realiza, sai do armazenada em uma base de dados MySQL. O programa
sistema ou fecha seu navegador, a sesso criada apa- TrichOKEY v. 1.0 foi escrito na linguagem PHP (PHP4)
gada. Alm disso, cada usurio est associado a um n- dentro do cdigo HTML das pginas. A base de dados e
vel de acesso, definindo quem pode ler, escrever e atua- os scripts esto localizados no endereo eletrnico
lizar os dados na base de dados. http://www.isth.info um portal sobre a taxonomia
A HTML pura no capaz de desenhar figuras, por- Hypocrea/Trichoderma, desenvolvido pelo grupo dos
tanto, uma forma de apresentar imagens mdicas em autores. O servidor roda com o sistema operacional Li-
pginas da Internet desenh-las no servidor e envi- nux, verso do kernel 2.4.21-15.0.4.ELsmp, com servi-
las para o navegador em um formato compatvel. Para dor Apache verso 1.3.33, PHP verso 4.3.10 e servidor

8 - 5a Edio - PHP Magazine


de base de dados MySQL verso 4.0.22-standard. Consideraes finais
Os autores planejam a expanso do sistema para Este artigo apontou as vrias aplicaes no comerci-
contemplar a identificao de quaisquer espcies, sendo ais da linguagem PHP, demonstrando a possibilidade de
tambm adaptado para os indivduos futuramente en- implementao de sistemas para divulgao do conheci-
contrados [Druzhinina, 2005]. mento e desenvolvimento cientfico.
6. Sensoriamento Remoto (Brasil 2007) Espera-se que, em relao ao desenvolvimento de
interfaces grficas, suporte matemtico e processamento
Na Universidade Federal do Rio Grande do Sul de imagens on-line, este documento tenha apontado a
(UFRGS), Leonardo Monteiro Brys e Srgio Florncio de linguagem PHP como uma alternativa vivel aos profis-
Souza desenvolveram um sistema na Internet para dis- sionais do ramo cientfico das empresas, universidades e
ponibilizar conceitos e definies de tcnicas de Proces- centros tecnolgicos brasileiros.
samento Digital de Imagens Orbitais (PDI).
Os autores justificam a escolha da linguagem PHP o Referncias e links sugeridos
fato de ser uma linguagem de programao server-side, BRYS, L.M.; SOUZA, S.F. Aplicao da linguagem PHP
possuir boa apresentao ao usurio e eficiente suporte em sensoriamento remoto. In: Anais XIII Simpsio Brasi-
matemtico e suporte a um grande nmero de banco de leiro de Sensoriamento Remoto, Florianpolis: 2007.
dados. Outras vantagens incluem a facilidade de imple-
mentar, em PHP, cdigos escritos em linguagem C, C++ BUCETI, G.; CENTIOLI, C.; IANNONE, F.; PANELLA, M.;
e Perl e a gratuidade da linguagem. RIZZO, A.;VITALE, V. A rating system for post pulse data
validation. Fusion Engineering and Design. 2003.
O artigo faz referncia implementao da pgina
clculos geodsicos on-line como ferramenta de suporte DRUZHININA, I.S.; KOPCHINSKIY, A.G.; KOMOJ, M.;
ao Geoprocessamento no Curso de Engenharia Cartogr- BISSETT, J.; SZAKACS, G.; KUBICEK, G.P. An oligonu-
fica da UFRGS cleotide barcode for species identification in Trichoderma
O sistema desenvolvido permite que o usurio faa o and Hypocrea. Fungal Genetics and Biology, v. 42, 2005.
upload de uma imagem em esquema de cores RGB e
outra em esquema pancromtico, as quais sero mis- FAN, T.S.; GUO, Z.Y.; YE, W.G.; LIU, W.L.; FENG, Y.G.;
turadas dinamicamente. O script transforma o sistema SONG, X.X.; HUANG, G.; LIU, T.J.;HONG, Y.J.; LIU, C.;
RGB em sistema HSV (Hue, Saturation, Value Tonali- CHEN, J.X.; TANG, G.Y.; SHI, Z.M.; HUANG, X.L.; CHEN,
dade, Saturao e Brilho) e combina as imagens, preser- J.E. NDOS: nuclear data online services. Annals of Nu-
vando as caractersticas espectrais da imagem RGB e as clear Energy, v. 31, 2004.
caractersticas espaciais da imagem pancromtica [Brys,
2007]. KUNTALP, M.; AKAR, O. A simple and low-cost Internet-
based teleconsultation system that could effectively
7. Densidade de probabilidade (Estados solve the health care access problems in underserved
Unidos 2007) areas of developing countries. Computer Methods and
Programs in Biomedicine, n 75, 2004.
A proposta do artigo foi explorar a utilizao da lin-
guagem PHP para proporcionar representaes visuais WANG, Z.J.; YANG, H.H.; DING, J. Webgraphics for the
para a distribuio de probabilidade de rbitas caticas. computation of invariant measures. Applied Mathematics
and Computation, v. 187, 2007.
Foi desenvolvido um sistema em PHP que permitia as
seguintes funcionalidades: seleo automtica de um
ZIMMERMANN, P.; HIRSCH-HOFFMANN, M.; HENNING,
sistema de clculo; seleo do sistema de clculo pelo
L.; GRUISSEM, W. GENEVESTIGATOR. Arabidopsis mi-
usurio; a exibio da distribuio densidade de probabi-
lidade na forma de tabela; e os grficos da densidade de
probabilidade.
Leandro Schwarz - leandroschwarz@gmail.com
Todos os sistemas so enviados a partir de formul- Engenheiro eletricista pela Universidade Federal de
rios HTML no mtodo POST para a pgina em PHP, na Santa Catarina (UFSC). Mestre em Engenharia
qual cada sistema de clculo representado por uma Eltrica (rea de concentrao: Engenharia
funo de clculo especfica. Para o acesso s variveis Biomdica) pela UFSC. Atuando desde 2000 com
postadas, foi utilizada a varivel $_REQUEST. desenvolvimento Web, possui slidos conhecimentos
Os grficos foram implementados em uma pgina em em PHP e MySQL.
separado utilizando a biblioteca GD. O artigo disponibi- Atualmente professor do Departamento de Design
liza parte do cdigo [Wang, 2007]. do Centro de Artes (CEART) da Universidade do Es-
tado de Santa Catarina (UDESC), e colaborador do
Laboratrio de Instrumentao (Labin) do Centro de
Cincias da Sade e do Esporte (CEFID) da UDESC.

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.
r o mtodo onClick().
O PHP uma linguagem que nasceu na Web e nes-
te ambiente que mais adotado. O ambiente Web re- A tarefa do mtodo onClick exibir uma janela de
gido pela arquitetura cliente-servidor, em que h o cdi- mensagem com o nome digitado pelo usurio.
go do programa interpretado pelo servidor e o resultado
de sua execuo. Normalmente nesse modelo, o resul- <?php
tando cdigo HTML para ser visualizado no navegador class Application extends GtkWindow
do cliente. Neste caso, a prpria arquitetura cliente- {
servidor impede o usurio de ter acesso ao cdigo-fonte private $nome;
do programa, a menos que a pessoa tenha acesso ao /*
* mtodo construtor
servidor da aplicao. * cria a janela e os campos
Quando desenvolvemos uma aplicao grfica em */
function __construct()
PHP-GTK, rodamos a aplicao de forma local, utilizando {
recursos da mquina cliente, da mesma forma que em parent::__construct();
aplicaes em Delphi ou Visual Basic. Mas, no caso do $this->set_title('Aplicao');
PHP-GTK, o cdigo da aplicao interpretado direta- // cria uma caixa vertical
mente pelo executvel do PHP. Desta forma, o cdigo- $vbox = new GtkVBox;
// campo para digitao do nome
fonte fica exposto ao cliente, caso ele queira investig-
$this->nome = new GtkEntry;
lo. // cria o boto
$botao = new GtkButton('Exibe');
O objetivo de se proteger um cdigo em PHP-GTK
// conecta o boto ao
pode ser comercial, impedindo que o cliente tenha aces- $botao->connect('clicked',
so indevido ao cdigo-fonte e realize cpias piratas, mas array($this, 'onClick'));
tambm pode evitar que um usurio curioso investigue // adiciona os campos na vbox
o cdigo do mesmo e interfira no seu funcionamento, $vbox->add($this->nome);
tomando conhecimento de senhas de acesso ao banco $vbox->add($botao);
// adiciona a vbox na janela
de dados, por exemplo. As tcnicas que iremos estudar $this->add($vbox);
se aplicam tanto para a utilizao com PHP-GTK, quanto }
para utilizao no desenvolvimento de uma aplicao /*
PHP Web. * mtodo onClick
* Exibe o nome digitado pelo usurio
*/
1. O programa function onClick()
{
Para demonstrar as tcnicas de proteo de cdigo,
$dlg =new GtkMessageDialog(null,
em primeiro lugar vamos construir uma pequena aplica- Gtk::DIALOG_MODAL,
o a ser protegida, chamada app.php. Gtk::MESSAGE_INFO, Gtk::BUTTONS_OK,
$this->nome->get_text());
A nossa aplicao de exemplo extremamente sim- $dlg->run();
ples. Ela est toda contida em uma classe chamada Ap- $dlg->destroy();
plication. A classe Application na verdade filha da clas- }
se GtkWindow, logo, pelo mecanismo de herana, ela }
uma janela. ?>

Dentro da janela Application, criaremos uma caixa


vertical (GtkVBox) e dentro desta caixa vertical colocare-
mos dois widgets. O primeiro ($this->nome) um objeto
GtkEntry para digitao de um nome qualquer. J o se-
gundo, ($botao) um boto que ao ser clicado executa-

10 - 5a Edio - PHP Magazine


ma empacotador da aplicao. Este programa ir ler o
cdigo da aplicao por meio da funo fi-
le_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 utili-
zando mtodos mais poderosos de criptografia. Ao final,
gravamos o cdigo compactado e criptografado no ar-
quivo app.php.cri.

<?php
$code = file_get_contents('app.php');
Figura 1 - Aplicao de exemplo $code = substr(trim($code),6, -2);
$code = base64_encode($code);
Agora, para executar tal aplicao, teremos de escre- file_put_contents('compress.zlib://
app.php.cri', $code);
ver 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. Agora, para podermos executar tal programa cripto-
grafado, temos de escrever outro programa. Este pro-
<?php grama ir ler o contedo do arquivo criptografado, cha-
// inclui a classe mado app.php.cri, descriptograf-lo e executar este
include_once 'app.php'; cdigo por meio da funo eval(). Aps, o funcionamen-
// instancia um objeto to do programa continua o mesmo.
$app=new Application;
// exibe a janela
$app->show_all(); <?php
Gtk::Main(); // inclui a classe criptografada
?> $code =
file_get_contents('compress.zlib://
app.php.cri');
2. Compactao eval(base64_decode($code));
// instancia um objeto
A forma mais simples de se proteger o cdigo de um
$app=new Application;
programa compactando-o. Este mecanismo protege o // exibe a janela
acesso ao programa de grande parte dos usurios, mas $app->show_all();
facilmente reversvel, tendo em vista que basta o usu- Gtk::Main();
rio final da aplicao descobrir que ele deve descom- ?>
pactar um arquivo para ter acesso ao seu cdigo-fonte. Voc deve ter percebido que as duas tcnicas de-
Para compactar a aplicao, iremos utilizar o aplicati- monstradas at aqui so bastante simples. Da mesma
vo GZ do Linux, que compacta o programa app.php, forma que so simples de utilizar so simples de serem
gerando um outro, chamado app.php.gz. desfeitas, uma vez que o usurio ter acesso ao cdigo-
# gzip app.php fonte que ir descriptografar e executar o cdigo fonte.
Desta forma, facilmente utilizamos um comando echo()
Agora, para utilizar o programa ao invs de simples- no lugar do eval() para exibirmos o cdigo-fonte em te-
mente executarmos o comando include_once sobre o la. Claro que nenhum usurio final faz isto, mas qualquer
arquivo compactado, precisamos indicar qual o wrapper desenvolvedor com conhecimentos bsicos em PHP pode
utilizado para sua interpretao. Neste caso, o wrapper fazer isto.
compress.zlib. O arquivo descompactado instantane-
amente e a classe fica disponvel. 4. bcompiler
<?php O bcompiler uma extenso do PHP que faz parte do
// inclui a classe compactada PECL (The PHP Extension Community Library), que um
include_once 'compress.zlib://app.php.gz'; repositrio de extenses comunitrias para PHP, escritas
// instancia um objeto em linguagem C. Funciona assim como o PEAR (PHP
$app=new Application; Extension and Application Repository), que um reposi-
// exibe a janela
$app->show_all(); trio de extenses escritas em PHP.
Gtk::Main(); O bcompiler foi escrito com o objetivo de codificar
?>
arquivos, classes ou funes por completo em uma apli-
cao proprietria.
3. Criptografia Simples
De acordo com o autor da bcompiler, Alan Knowles, a
Podemos melhorar um pouco mais o algoritmo anteri- utilizao da extenso pode melhorar o desempenho em
or, criptografando o cdigo da aplicao alm de com- at 30%, embora o cdigo codificado seja bem maior
pact-la. Para tal, iremos escrever um pequeno progra- em termos de tamanho fsico ocupado pelo arquivo em

PHP Magazine - 5a Edio - 11


relao aplicao normal. Em termos de proteo de interpretador ir carregar a extenso bcompiler.so, que
cdigo, seguro dizer que impossvel recriar o exato disponibiliza as funes da bcompiler, abrir o arquivo de
cdigo-fonte original. byte-codes por meio da funo fopen() e interpretar o
arquivo codificado por meio da funo bcompiler_read().
Para utilizar a bcompiler, primeiro devemos instal-la.
Note que esta funo disponibiliza para aplicao exata-
Alguns pr-requisitos devem ser satisfeitos em alguns
mente o mesmo cdigo que foi codificado. Desta forma,
ambientes. No caso do sistema operacional Ubuntu, ser
o programador ter neste momento acesso classe
necessrio instalar algumas bibliotecas relacionadas
Application, que faz parte do arquivo original
compactao de arquivos (bzip2).
app.php que foi codificado. Aps executarmos a bcom-
# apt-get install libbz2-dev bzip2 piler_read(), fechamos o arquivo e ento j podemos
instanciar objetos da classe Application. No final do pro-
Aps isto, podemos proceder para a instalao da grama instanciamos um objeto e exibimos ele em tela
bcompiler em si. Para tal, utilizamos o binrio pecl, que pelo mtodo show_all(). Neste momento o programa
acompanha a instalao do PHP. Para tal, digitamos o ser executado da mesma forma que em nosso primeiro
seguinte comando a partir do diretrio onde os binrios exemplo onde interpretvamos diretamente o cdigo-
do PHP esto instalados. fonte.
# <php>/bin/pecl install bcompiler-0.8 <?php
// carrega a bcompiler
Agora que temos a bcompiler instalada, teremos de dl('bcompiler.so');
// abre o arquivo compactado
escrever dois programas. O primeiro programa ir gerar $fh = fopen("compress.zlib://
os byte-codes e o segundo ir interpret-los. Para distri- compiled.phpb","r");
buir o programa ao usurio final, precisaremos distribuir // l os byte-codes
apenas os byte-codes e o programa interpretador. bcompiler_read($fh);
// fecha o arquivo
Este primeiro programa listado a seguir o codifica- fclose($fh);
dor, sua funo ler o contedo de nosso programa // intancia o objeto
app.php, codific-lo e gravar o contedo codificado $app=new Application;
// exibe a janela
dentro de um arquivo chamado compiled.phpb, que
$app->show_all();
alm de codificado ser tambm compactado. Para codi- Gtk::Main();
ficar o arquivo, utilizamos a funo bcompiler_write_file ?>
(), alm de outras com o objetivo de criar o cabealho e
rodap do arquivo. Consideraes finais

<?php Neste artigo estudamos algumas tcnicas muito sim-


// carrega a extenso bcompiler ples de se proteger o acesso ao cdigo-fonte at abor-
dl('bcompiler.so'); darmos a bcompiler, uma extenso bastante complexa e
// define o arquivo a ser gravado os byte- poderosa do PHP. Sabemos da existncia de diversas
codes ferramentas comerciais com o objetivo de proteger ou
$fh = fopen("compress.zlib://
ofuscar cdigos em PHP. Mesmo assim, focamos este
compiled.phpb","w");
// escreve o cabealho do arquivo artigo em solues simples, livres e que funcionassem
bcompiler_write_header($fh); no apenas no ambiente Web, mas tambm para quem
// codifica o arquivo 'app.php' desenvolve em PHP-GTK.
bcompiler_write_file($fh, 'app.php');
// escreve o rodap do arquivo Referncias e links sugeridos
bcompiler_write_footer($fh);
fclose($fh); [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
Aps rodarmos o programa codificador, o arquivo
[Site do PECL] http://pecl.php.net
compiled.phpb ser gerado. O contedo do arquivo
[Site bcompiler] http://www.php.net/bcompiler
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 Pablo DallOglio - pablo@dalloglio.net


5<94>^L^Z`M^[h^A8E`<9f>^T! Pablo Dall'Oglio bacharel em Informtica pela
PZl<88>LM<83>,6^]<90>9B<9 UNISINOS. Autor dos livros "PHP Programando
<88><82><99>T!` com Orientao a Objetos" e "PHP-GTK Criando
c6^B<9e>43 c<8d><9a>^Byz Aplicaes Grficas com PHP", pela editora Nova-
,4'^S/-<98><89 tec. Tambm foi o criador do PHP-GTK Brasil.
\+4@+pVWcVh-H~O<8c>D Atualmente, diretor de tecnologia e proprietrio
>7M^NL <99>7<82>7<86>3^Zu^U
da Adianti Solutions (www.adianti.com.br).
Aps codificarmos nosso programa, podemos escre-
ver o programa interpretador que ser distribudo junta-
mente com os byte-codes (compiled.phpb). O programa

12 - 5a Edio - PHP Magazine


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.
uma vulnerabilidade de SQL Injection;
Em diversos momentos o foco principal atender a
todos os requisitos definidos pelo cliente num prazo real- - Integridade: assim como possvel ler informa-
mente curto. Em algumas ocasies, por falta de planeja- es confidenciais, tambm possvel fazer mudanas
mento ou porque realmente o desenvolvedor no se a- ou at mesmo excluir informaes usando ataque de
tm a detalhes, o projeto acaba deixando algumas lacu- SQL Injection.
nas de segurana abertas aps a publicao.
2. Demonstrao de implementaes vul-
Umas das falhas mais comuns e encontradas facil-
mente no mudo Web a injeo de comandos SQL, co- nerveis a SQL Injection
nhecido como SQL Injection. Apresentaremos aqui o que Tomaremos como exemplo de cdigo vulnervel um
essa falha e quais as conseqncias que a explorao script simples para fazer autenticao na aplicao a
da falha pode nos trazer, bem como prticas para preve- partir de um usurio e senha fornecidos por um cliente.
ni-la. Tambm ser apresentado outro script cuja principal
funo demonstrar ao usurio uma notcia, bem como
1. O que SQL Injection? seu ttulo e autor. Essas informaes so recuperadas da
Sql Injection um tipo de ataque que consiste na base de dados por meio de parmetros fornecidos via
injeo de uma consulta SQL via entrada de dados do mtodos POST ou GET.
cliente para a aplicao. Um ataque bem sucedido pode Veja abaixo um exemplo de script vulmervel de au-
ler dados sigilosos de uma base de dados, modific-los tenticao (login):
(update/insert/delete), executar operaes de adminis-
trao no banco de dados (ex: shutdown) e, em alguns <?php
casos, executar comandos no sistema operacional (ex: // Script: artigo1.php (Sript de autenticao)
SQL Server xp_cmdshell). Um exemplo de execuo seri- // Funcao: demonstrar vulnerabilidade de SQL I
a=> exec xp_cmdshell dir c:, O ataque tambm pode njection
$login = $_POST['login'];
fazer leitura (Mysql load_file) de arquivos do sistema.
$senha = $_POST['senha'];
As principais conseqncias de uma injeo de SQL mysql_connect "localhost", "root", "ismael");
mysql_select_db("teste");
bem sucedidas podem ser:
- Confidencialidade: banco de dados geralmente $query = "SELECT * FROM users WHERE login_use
guardam informaes confidenciais. A perda de confi- r='$login' AND password_user='$senha'";
dencialidade um freqente problema com as vulnerabi- $consulta = mysql_query($query) or die
lidades de SQL Injection; (mysql_error());
$linhas = mysql_num_rows($consulta);
- Autenticao: se a aplicao no faz os devidos if ($linhas > 0)
tratamentos nos dados que so inputados pelo usurio {
e j encaminha tais dados para a query do banco de echo "Seja bem-vindo!!";
dados para verificao de credenciais, possvel acessar }
o sistema sem conhecimento prvio de senha/usurio. else
{
- Autorizao: se alguma informao de autorizao echo "Login e/ou senha invalidos!!";
est guardada em um banco de dados SQL, pode ser }
possvel mudar a informao por meio da explorao de ?>

PHP Magazine - 5a Edio - 13


No nosso formulrio submeteremos as seguintes in- }
formaes conforme mostrado na tela abaixo:
$query = "SELECT titulo, conteudo, auto
r FROM noticias WHERE id=$id";
$consulta = mysql_query($query);
$linhas = mysql_num_rows($consulta);

if ( $linhas==0 )
{
echo "No foi possvel recuperar a not
cia informada!!";
}
else
Figura 1 - Formulrio de Login {
echo mysql_result
Observe que no campo senha informamos a seguin- ($consulta, 0, titulo)."<br><br>";
echo mysql_result
te instruo: ($consulta, 0, conteudo);
OR 1=1 echo mysql_result
($consulta, 0, autor)."<br><br>";
Da forma como os dados foram submetidos, a query }
montada dinamicamente no script acima, ficaria da se- ?>
guinte forma: Na figura 3, nosso script funcionando com uma requi-
SELECT * FROM users WHERE sio normal:
login_user='qualquercoisa' AND pass-
word_user=' ' or 1='1'
Dessa maneira, a afirmao acima verdadeira, pois
a consulta tenta encontrar algum registro se a condio
campo login_user for igual a qualquercoisa e pass-
word_user= ou 1 for igual a 1.
Da maneira como foi implementado o script, a auten-
ticao acontece a partir do momento em que a 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 apli-
cao.

Figura 3 Cdigo de notcias em funcionamento normal

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 MyS-
QL:
Figura 2 - Autenticao realizada com sucesso
UNION SELECT user,host,password FROM
Abaixo, damos um exemplo de cdigo do script vul- mysql.user LIMIT 1,1
nervel de notcias:
<?php A figura 4 demonstra o resultado aps a insero da
// Script: artigo1.php (Script de noticias instruo SQL acima.
)
// 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 Figura 4 Host, usurio e senha retornados
{
$id = $_GET[id];

14 - 5a Edio - PHP Magazine


A instruo injetada nos retornou os campos user, 3.1 Os recursos de escape
login e password, oriundos da base MySQL, que so os
usurios vlidos que se conectam ao servidor de banco Para aqueles que no conhecem, o Magic Quotes
de dados. Explorando essa falha possvel obter os usu- um recurso do PHP em que so inseridos automatica-
rios e senhas do SGDB. Observe que nesse caso, a apli- mente caracteres de escape (\) em todos os dados envi-
cao vulnervel se conecta como root ao SGDB. Por ados para um script PHP, via POST ou GET e Cookie.
isso possvel fazer a leitura da base de dados MySQL. Com esta opo habilitada no php.ini, nosso script que
Sendo assim, a senha criptografada passvel de ataque faz a autenticao de usurios estaria protegido, pois, ao
de fora bruta para recuper-la. inserir a instruo OR 1=1, o prprio PHP adicionaria \
antes das aspas, fazendo com que a consulta enviada ao
Em uma outra situao, poderamos fazer uso da ba- banco ficasse da seguinte forma:
se de dados information_schema (disponvel a partir da
verso 5.0) para levantar informaes diversas, tais co-
mo nome de bancos, tabelas, colunas entre outras coi- SELECT * FROM users WHERE
login_user='qualquercoisa' AND pass-
sas sobre as quais o usurio da aplicao conectado ao word_user='\'or 1=\'1'
SGDB possui privilgios. Veja o exemplo:
UNION SELECT table_name, table_schema,
Entretanto, como foi observado, h casos de injeo
column_name FROM informa-
tion_schema.columns LIMIT 286,1 de instrues em que um atacante no necessita de as-
pas, como no exemplo do script de notcia e, sendo as-
sim, funes de escape como o addslashes(), mys-
ql_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 recomenda-
o sempre validar os dados recebidos por um usurio,
checando/convertendo seu tipo de acordo com o campo
Figura 5 No exemplo acima, a injeo de comandos nos re- a ser consultado, delimitando o tamanho de acordo com
torna o nome de uma tabela, nome de um banco e nome de o campo para consulta e aplicando expresso regular
um campo dessa tabela. sobre os mesmos.

Com a injeo da instruo acima, obtivemos como No script de notcias, o problema da injeo de ins-
resultado os campos table_name, table_schema, co- truo SQL seria resolvido facilmente apenas converten-
lumn_name do banco de dados information_schema. do o valor de $_GET[id] para um inteiro, usando a fun-
Verificamos que existe uma base de dados chamada o intval(). No caso, o PHP ao converter 1 UNION ...
helpdesk, uma tabela chamada tickets_up e um campo retornaria apenas 1. No exemplo de autenticao, caso o
chamado tamanho_anexo. Um atacante poderia facil- sistema de senhas da aplicao, por exemplo, permitisse
mente montar o desenho de todos os bancos de dados apenas nmeros e letras, poderia-se utilizar expresso
em que o usurio da aplicao conecta do SGDB possui regular para checar de os dados fornecidos. Funes
permisso e, conseqentemente, ler as informaes con- como preg_match(), strlen(), intval(), intfloat(), dentre
tidas nessas bases aps o conhecimento do nome das outras, so bastante teis no auxlio da validao dos
tabelas e campos. dados.

3. Medidas preventivas
3.2 Prepared statements (medida eficaz
H diversas formas de se prevenir contra a injeo de contra SQL Injection)
comandos SQL. Pode-se utilizar desde recursos da pr-
pria engine PHP, como magic_quotes_gpc (em alguns Prepared statement a habilidade de definir uma
casos), at o uso funes diversas como escape de da- consulta uma vez e execut-la diversas vezes com dife-
dos (mysql_real_scape_string, addslashes), alm das rentes parmetros. Sua principal funo separar a lgi-
prepared statements. ca da consulta SQL dos dados recebidos para a monta-
gem da query dinamicamente. Sendo assim, a nossa
query do script de autenticao ficaria o como:

PHP Magazine - 5a Edio - 15


SELECT * FROM users WHERE login_user=? AND descobrir senhas etc. A preveno no algo to com-
password_user=? plicado. As principais dicas so: sempre validar a entrada
de dados oriundas dos clientes e utilizar as prepared
Substitumos as variveis $login e $senha por duas statements. A utilizao de frameworks tambm pode
interrogaes. Ao enviar a query preparada para o contribuir para a reduo da vulnerabilidade, visto que
banco de dados, ele fica no aguardo dos parmetros alguns possuem mecanismos de filtragem de dados que
para fazer a comparao (nesse caso) e tambm da ins- utilizam diversos recursos, inclusive expresses regula-
truo para executar a query. res. Aos programadores mais experientes fica a dica de
revisarem seus cdigos, pois a correria do dia-a-dia faz
Dessa forma, se envissemos algo como OR com que deixemos brechas s vezes imperceptveis e,
1=1, esse valor apenas seria comparado com o campo segundo o Gartner, rgo bastante reconhecido na rea
password_user assim que fizssemos a ligao do pa- de pesquisas tecnolgicas, 75% dos ataques bem suce-
rmetro aguardado com a varivel $password, pois, a didos ocorrem via aplicaes Web.
lgica da query j foi montada previamente e est ape-
nas a espera de um parmetro. O recurso de prepared Referncias e links sugeridos
statements pode ser utilizado em diversas consultas SQL [PHP] - ht tp ://w w w .p hp .ne t/m a nua l/pt _ BR /
como updates, inserts, deletes. book.mysqli.php
Utilizada amplamente, a biblioteca MySQLD infeliz- http://www.php.net/manual/pt_BR/book.pdo.php
mente no possui esse tipo de recurso, entretanto, h [OSWAP]
diversas outras bibliotecas que trabalham com prepared http://www.owasp.org/index.php/SQL_injection
statements, como a MySQLI e PDO. Abaixo, segue um [GARTNER]
exemplo do mesmo script utilizando MySQLI. Abaixo, um http://www.gartner.com/it/about_gartner.jsp
cdigo com instrues Prepared Statements.

<?php
//Script:artigo1.php (Script de autenticao)
$login = $_POST['login'];
$senha = $_POST['senha'];
Ismael Rocha - ismaelrg@gmail.com
//Instancia objeto para conexo com banco
$bd = new mysqli
Graduando em Sistemas de Informao pela Grupo
(localhost , user_ismael, ismael, teste Anhaguera, atua h mais de 5 anos na rea de de-
); senvolvimento de sistemas em diversas linguagens.
Atualmente, trabalha com segurana da informao
$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!!";
}
?>

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

16 - 5a Edio - PHP Magazine


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.
veremos nas prximas sees.
O MVC (Model-View-Controller) um Padro de Ar-
quitetura de Software criado com o objetivo de aumen-
tar a produtividade, separando a lgica do negcio da
2. O que MVC?
apresentao com o uso de controladores e implemen- Antigamente as aplicaes eram monolticas, ou seja,
tando alguns Design Patterns (Padres de desenvolvi- no havia separao em camadas no desenvolvimento.
mento de software). Sua maior vantagem a facilidade Com o surgimento de linguagens de programao orien-
de manuteno do cdigo, pois oferece estrutura de di- tadas a Objetos, como C# e Java, surgiu tambm uma
retrios, arquivos e classes criadas. nova maneira de se desenvolver, separando em uma
J o AJAX (Asynchronous Javascript And XML) um camada especfica o cdigo relativo persistncia. Com
conjunto de tecnologias que tem como intuito tornar isso, um padro antigo se popularizou, principalmente
mais dinmica e interativa a camada de apresentao por ter sido implementado em alguns frameworks.
(View), fazendo com que o usurio tenha uma experin- Esse padro o MVC, que foi descrito pela primeira
cia muito melhor com o aplicativo. vez em 1979 por Trygve Reenskaug nos laboratrios da
Se utilizados da maneira correta, PHP, MVC e AJAX Xerox, utilizando SmallTalk.
permitem o desenvolvimento de aplicaes com alta pro- MVC a sigla de Model View Controller, onde temos
dutividade, interatividade e qualidade. uma camada denominada Modelo, que so as regras de
negcio do sistema, a camada da Viso, que a interfa-
1. Design Patterns ce entre usurio e o sistema, e os Controladores, que
so utilizados para controlar o fluxo da aplicao.
Design Patterns o termo em ingls para Padres de
Projeto de Software, que nada mais do que uma pa- Com o objetivo de separar as camadas, o MVC tem
dronizao no desenvolvimento de software. como resultado um cdigo extremamente organizado,
facilitando o desenvolvimento e a manuteno de siste-
Antes de tudo, preciso saber que um Design Pat-
mas.
tern um conceito e no uma tecnologia. Sendo assim,
no est ligado obrigatoriamente com nenhuma lingua- Para que o MVC seja implementado necessria a
gem de programao ou framework de desenvolvimento. utilizao de uma linguagem de programao com su-
porte Orientao a Objetos. Portanto, com o melhor
Os Design Patterns surgiram com a necessidade dos
suporte do PHP 5 em relao Orientao a Objetos,
desenvolvedores de resolver problemas de maneira efi-
trabalhar com PHP 5 e MVC uma tarefa simples e efi-
caz. Christoper Alexander estabeleceu na dcada de 70
caz.
que os padres de projeto devem ter como objetivo re-
solver um problema especfico e, para isso, devem con-
ter um nome, um exemplo, um contexto, um problema e 2.1. Vantagens de utilizar MVC
uma soluo.
Ao desenvolver utilizando MVC, h vrias vantagens
Entre os padres mais utilizados no desenvolvimento em relao ao modelo estruturado.
de software atualmente esto o Factory, com o objetivo
- Reaproveitamento de cdigo
de centralizar a criao de objetos, e o Singleton, que
faz com que uma classe tenha somente uma instncia Uma das maiores vantagens da Orientao a Objetos
ativa. J o Strategy encapsula algoritmos e os represen- o reaproveitamento de cdigo, j que ao modularizar
ta atravs de uma interface. Outro padro interessante so criadas classes e funes que podem ser utilizadas
o Template Method, que define uma estrutura abstrata em vrias partes da aplicao.
de classes com funcionamento parecido.
- Facilidade de manuteno
O MVC vai alm do conceito de Design Patterns, pois
Com uma boa estrutura de diretrios e arquivos rela-
define padres para a arquitetura do software, como
tivamente pequenos, encontrar um trecho de cdigo

PHP Magazine - 5a Edio - 17


para alteraes se torna uma tarefa simples.
- Integrao de equipes e/ou diviso de tarefas PHP.MVC
Cada integrante da equipe pode trabalhar em uma O PHP.MVC foi desenvolvido com o objetivo principal
camada especfica. Por exemplo, um designer pode fazer de implementar o MVC com PHP utilizando um controla-
a camada de apresentao, enquanto programadores dor principal. Teve como base o framework Jakarta S-
trabalham nos controladores e regras de negcio. truts, inclusive implementando vrias funcionalidades do
Struts, como utilizar XML em sua configurao.
- Camada de Persistncia independente
-> Verso Estvel: 1.0
Utilizando MVC, a aplicao no fica dependente de
um banco de dados, pois a comunicao entre PHP e BD -> Gratuito
feita em uma camada especfica. A alterao do Banco
-> Link: http://www.phpmvc.net/
de Dados utilizado pode ser feita sem afetar outras par-
tes da aplicao. Alm disso, h a possibilidade da utili-
zao de uma biblioteca de BD para que a aplicao se
Symphony
torne portvel a vrios bancos.
O Symphony um framework de desenvolvimento
- Implementao de segurana
em PHP que proporciona uma arquitetura, componentes
Uma grande vantagem de utilizar controladores a e ferramentas para desenvolvedores construir aplicaes
implementao de segurana, j que todo o fluxo da Web robustas e complexas mais rapidamente. O Sym-
aplicao inicia e termina em um controlador. Alm dis- phony utiliza boas prticas de desenvolvimento Web in-
so, h outras partes do sistema na qual a segurana po- tegradas com bibliotecas de terceiros.
de ser feita.
-> Verso Estvel: 1.1
- Facilidade na alterao da interface da aplicao
-> Gratuito
Para alterar a interface da aplicao no necessrio
-> Link: http://www.symfony-project.org/
refazer o sistema, basta aplicar as alteraes na camada
de viso. Para facilitar ainda mais, pode ser implementa-
da alguma biblioteca de templates.
Zend Framework
Alm disso, h outras vantagens como a padroniza-
Desenvolvido pela empresa criadora do PHP, o Zend
o do cdigo e o aumento da produtividade pela veloci-
Framework baseado na simplicidade, boas prticas do
dade do desenvolvimento, entre outros pontos positivos.
desenvolvimento orientado objetos e conta com uma
base de cdigo fortemente testado. Tem como objetivos
2.1. Frameworks que implementam MVC desenvolver sistemas seguros, confiveis e modernos.

CakePHP -> Verso Estvel: 1.5.1

O CakePHP um framework de desenvolvimento de -> Gratuito


software que utiliza PHP e proporciona uma extensa ar- -> Link: http://framework.zend.com/
quitetura para o desenvolvimento de sistemas com velo-
cidade. Ele utiliza alguns design patterns como MVC e
ORM. O objetivo do CakePHP diminuir o custo do de- PRADO
senvolvimento ajudando os desenvolvedores a escrever
cdigos menores. O PRADO um framework baseado em componentes
para o desenvolvimento de aplicaes Web com PHP.
-> Verso Estvel: 1.1.19.6305 PRADO a sigla para PHP Rapid Application Develop-
-> Gratuito ment Object-oriented, e conta com uma rica documenta-
o e uma grande comunidade.
-> Link: http://www.cakephp.org/
-> Verso Estvel: 3.1.1
-> Gratuito
CodeIgniter
-> Link: http://www.pradosoft.com/
O CodeIgniter um framework feito para desenvol-
vedores que necessitam de uma ferramenta simples e
elegante para desenvolver aplicaes Web completas.
Uma das maiores vantagens de utiliz-lo a alta perfor- 3. Model
mance que ele proporciona. Podemos dizer que a camada Model o corao da
-> Verso Estvel: 1.6.1 aplicao. nela que est a lgica da aplicao, respon-
svel pelo que a mesma ir realizar. Nesta camada os
-> Gratuito dados so manipulados e armazenados. Para facilitar
-> Link: http://www.codeigniter.com ainda mais, esta camada separada em outras trs par-

18 - 5a Edio - PHP Magazine


tes: A Entidade, que chamamos de Bean, a camada de 3.2. DAO
Persistncia, chamada de DAO e os arquivos de regras
de negcio, que so as Actions. Veremos a seguir cada DAO a sigla de Data Access Object, que pode ser
uma delas. traduzido como Objeto de Acesso a Dados. Ele um ob-
jeto que prov uma interface abstrata para persistncia
de dados, ou seja, um conjunto de funes que fazem
3.1. Bean a comunicao com os dados, seja em um banco de da-
dos, um arquivo XML ou qualquer outra forma de arma-
Implementando um conceito muito utilizado em Java,
zenamento.
os JavaBeans, temos as entidades encapsuladas. A defi-
nio de Bean seria um componente de software que Para utilizar um SGBD, por exemplo, as consultas
pode ser reutilizado vrias vezes. So utilizados para SQL sero escritas no DAO, ou ento uma biblioteca de
encapsular vrios atributos em um objeto. Na prtica persistncia pode ser implementada nessa camada para
teremos um Bean para cada entidade do sistema. facilitar essa comunicao.
A estrutura de um Bean bastante simples, come- Uma das grandes vantagens de se utilizar uma cama-
ando com a declarao da classe, que tem o nome da da de persistncia independente a portabilidade de
entidade, seguido da declarao dos atributos com o banco de dados que o DAO oferece. Para fazer uma mi-
modificador de acesso private, e os mtodos setters e grao de banco de dados, ao invs de alterar toda a
getters. Para que a aplicao obtenha maior segurana, aplicao nos locais onde h comunicao com o banco,
deve ser implementado o conceito de Encapsulamento. basta fazer as alteraes nesta camada. Se uma bibliote-
Com isso, os atributos no podem ser acessados direta- ca de persistncia estiver sendo utilizada, essa alterao
mente, j que esto declarados como private, podendo fica ainda mais simples, j que apenas o arquivo de co-
ser acessados somente pelos setters e getters. Um set- nexo precisa ser alterado. Entre as bibliotecas mais uti-
ter um mtodo que segue o padro setAtributo(), e lizadas esto a EzPDO, o Propel e o PE-
serve para definir o valor de um atributo. J o getter AR:DB_DataObject.
um mtodo que segue o padro getAtributo () e serve
Aps implementado, o DAO pode ser utilizado sempre
para obter o valor de um atributo, sempre que for ne-
que for necessria a persistncia de dados.
cessrio utilizar um atributo em um sistema, ser esse o
mtodo utilizado. Segue um exemplo de DAO.
<?
Qualquer validao ou verificao a ser feita em um
atributo deve ser implementada nos mtodos setters e class ProdutoDAO {
getters. a que questes de segurana devem ser im- public function listar()
plementadas, como forar um atributo a ter um determi- {
nado tipo, evitando SQL injection, por exemplo.
$sql = "SELECT id, nome, valor
Segue um exemplo de um Bean. FROM produto
<? ORDER BY nome";
class Produto
$query = mysql_query($sql);
{
private $id;
$lista = array();
private $nome;
// ... outros atributos ...
$cont = 0;
while ($linha = mysql_fetch_object
public function setId($id) {
($query)) {
$this->id = (int)$id;
$lista[$cont] = new Produto();
}
$lista[$cont]->setId($linha->id));
public function getId() {
$lista[$cont]->setNome($linha>nome));
return $this->id;
$lista[$cont]->setValor($linha>valor));
}
}
public function setNome($nome) {
return $lista;
$this->nome = $nome;
}
}
}
public function getNome() {
?>
return $this->nome;
} Figura 2 Exemplo de DAO
// ... outros setters e getters ...
} 3.3. Actions
?>
Figura 1 Exemplo de Bean Os arquivos Actions so arquivos de Ao. nele que
se localizam as regras de negcio da aplicao. O arqui-
vo de ao consiste em uma classe com o nome da ao
a ser executada e um mtodo execute(), que contm o

PHP Magazine - 5a Edio - 19


cdigo que ser executado. A boa usabilidade, implementada nessa camada,
essencial para o sucesso da aplicao. De nada adianta
Esses arquivos utilizam o Bean e o DAO para realizar
ter uma aplicao com um alto nvel de processamento,
persistncia de dados, alm de disponibilizar dados para
se a apresentao no for muito usual e o usurio no
a camada de Viso.
conseguir utiliz-la. Para uma boa usabilidade devemos
Segue um exemplo de um arquivo de Ao. ter muita interatividade e transparncia para o usurio,
<? que podem ser proporcionadas pelo AJAX.
class Listador {

public function execute()


4.1 AJAX
{ O AJAX o uso em conjunto de vrias tecnologias
Conexao::conectar(); promovendo uma tcnica de requisio assncrona muito
difundida com a WEB 2.0. Antes de entender o que
$produtoDAO = new ProdutoDAO();
jax, temos que compreender como funciona a requisi-
$lista = $produtoDAO->listar();
o assncrona em pginas WEB.
$_REQUEST['lista'] = $lista; Temos por requisio assncrona tudo aquilo que re-
return "Listar"; quisita dados do servidor sem a necessidade de toda a
} pgina ser recarregada. Applet, Flash e Iframes so e-
xemplos de tecnologias que fazem requisio assncrona.
} Para entender melhor esse conceito, observe os diagra-
?> mas abaixo.
Figura 3 Exemplo de Action

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 transfor- Figura 4 Fluxo na Web sem requisio assncrona
ma esses dados em informao para o usurio.
notvel que dessa maneira a camada de viso qua-
se no contm cdigo PHP, apenas as variveis geradas
no Model e algum lao de repetio, em listagens. Mas
podemos abstrair ainda mais a linguagem PHP da cama-
da de viso utilizando templates.
Os templates so modelos, sem contedo, que pos-
suem a apresentao visual de aplicaes dinmicas.
Para suprir a pequena necessidade de linguagem no
visual (PHP) da view, muitos sistemas de templates utili-
zam uma linguagem prpria para manipular a exibio
dos dados provindos do servidor. Como exemplo, pode-
se citar o Smarty, o sistema de templates mais tradicio-
Figura 5 Fluxo na Web com requisio assncrona
nal para PHP.
Independente das implementaes contidas na view, Ao contrrio do que feito normalmente, quando
importante observarmos que com o MVC a camada de utilizamos requisio assncrona, uma mesma pgina
viso fica to bem separada que pode ser desenvolvida consegue fazer vrias requisies. Isso nos fornece di-
inteiramente por um designer, que no entende de PHP. versas vantagens, como a reduo do trfego na rede e
Ou, ainda, podemos desenvolver duas camadas de viso a maior transparncia para o usurio, tornando o siste-
para uma mesma aplicao: a Web e a Desktop ma semelhante a uma aplicao Desktop.
(utilizando PHP-GTK), tornando a aplicao ainda mais No AJAX a requisio feita atravs do Javascript
portvel. para um XML que se encontra no servidor. Quando usa-

20 - 5a Edio - PHP Magazine


mos AJAX com PHP, o XML formado pelo PHP dinami- //Exemplo de uso
ajax("pagina.php", "GET",
camente atravs de algum parmetro que o Javascript
"categoria=5&produto=1");
passou na requisio. Integrando o AJAX com MVC tere-
mos dois tipos de view: a view que solicita arquivos XML Figura 7 Exemplo de funo JavaScript para a requisio.
para o servidor e as views que constroem esses ar- Observe no cdigo acima que ao evento onreadysta-
quivos. techange atribuda uma funo que verifica se a requi-
Para compreender como a requisio assncrona com sio foi concluda e se a URL vlida. Se sim, coloca o
contedo da requisio numa tag com id igual a
Javascript funciona, devemos entender os objetos XM-
'conteudo'. Aps definir o manipulador do evento, a fun-
LHttpRequest, responsveis por ela. Infelizmente esse
o ajax configura a requisio com o mtodo open e
objeto ainda no est padronizado, sendo possvel que
requisita com o mtodo send, passando os parmetros.
em navegadores diferentes ele esteja em diferentes es-
copos. Para sanar essa incompatibilidade o seguinte c- Apesar de AJAX utilizar XML, comum chamarem
digo pode ser usado: 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
try em HTML ou Texto puro que o mais simples. A res-
{ posta em script uma string que pode ser transformada
// Firefox, Opera 8.0+, Safari, etc...
xhr = new XMLHttpRequest(); em cdigo JavaScript atravs da funo eval(). JSON
} (JavaScript Object Notation) um formato para serializa-
catch (e) o de objetos em JavaScript. O PHP 5 possui nativa-
{ mente funes que serializam/deserializam objetos dele
// Internet Explorer em JSON (json_encode, json_decode). Com isso fcil
try passar um objeto do PHP para o JavaScript de forma
{ bem simples, utilizando o mnimo possvel de banda.
xhr = new ActiveXObject("Msxml2.XMLHTTP");
JSON tm se tornado uma excelente alternativa ao XML
}
catch (e) no AJAX.
{ Para facilitar o uso do AJAX e possibilitar outros re-
xhr = new ActiveXObject cursos da WEB 2.0, podemos utilizar bibliotecas como o
("Microsoft.XMLHTTP"); jQuery, o MooTools ou o Prototype, ou frameworks co-
}
mo o Dojo, o Rico ou o extJS.
}
Figura 6 Javascript para instanciar o objeto XMLHttpRequest 5. Controller
Dentre os mtodos do objeto XMLHttpRequest os O Controller o controlador da aplicao, ele o res-
mais importantes so o open, responsvel por configurar ponsvel por controlar o fluxo da aplicao e pode tam-
o metodo e a url da requisio e o send, responsvel por bm implementar segurana.
enviar a requisio. H tambem alguns atributos que
meressem ser comentados: readyState, que representa Todas as requisies feitas ao sistema so iniciadas
o estado atual da requisio (variando de 0 no pelo controlador. O usurio acessa o controlador pela
inicializada 4 concluda); responseXML, a resposta URL passando parmetros, que sero utilizados para
em XML; responseText, a resposta em texto; status, o determinar o fluxo da aplicao.
cdigo do status da URL requisitada e o evento Alm disso, o fluxo da aplicao sempre ser encerra-
onreadystatechange, que chamado em cada mudana do pelo controlador, por isso, ele se torna bastante til
de estado do objeto. Abaixo, o exemplo mais bsico de para implementar segurana, como verificaes de nveis
funo para a requisio assncrona: de acesso e gravao de logs de acesso. Pode ser utiliza-
do tambm para abrir e fechar uma conexo ao banco
function ajax(url, metodo, parametros) { de dados, por exemplo.
<?
xhr.onreadystatechange = function() { $module = $_GET['module'];
var divId = 'conteudo'; $acao = $_GET['acao'];
if (xhr.readyState==4 && xhr.status==200)
{ $url = $_GET['module']. "/action/" . $_GET
['acao'] . ".php" ;
var div = document.getElementById require_once($url) ;
(divId);
var texto = xhr.responseText; $acao = new $_GET['acao'];
div.innerHTML = texto; $retorno = $acao->execute();
$view = $_GET['module'] . "/view/frm" . $re-
} torno . ".php" ;
} require_once($view) ;
?>
xhr.open(metodo, url, true); Figura 8 Exemplo de Controlador
xhr.send(parametros);
}

PHP Magazine - 5a Edio - 21


6. Estrutura de Diretrios Consideraes Finais
Na raiz da aplicao situa-se o controlador principal. Quando desenvolvemos para Web, temos um desafio
Para cada entidade cria-se um diretrio com o nome do maior em tornar a aplicao interativa e com o cdigo
mesmo. Dentro de cada entidade, h um arquivo com o organizado, sem misturar Linguagem de Banco de Da-
nome da entidade, que o arquivo Bean, e o arquivo dos, Linguagem de Programao e Linguagem de Marca-
DAO. Alm disso, h um diretrio Actions, onde se locali- o. Neste artigo mostramos uma maneira de usar con-
zam os arquivos de Ao, e por fim o diretrio view, on- ceitos e padres que se do muito bem sozinhos e me-
de so armazenados os arquivos de apresentao, que lhor ainda juntos: MVC e AJAX com PHP. Detalhamos o
por padro tem o prefixo frm. 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
Almir Neto - almirneto@gmail.com
MVC.
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 Softwa-
re Livre e de Padres para Web, Otvio Calaa Xavi-
er trabalha como analista desenvolvedor na Cmara
de Dirigentes Lojistas de Goinia. Ministrou o mini-
curso "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 minis-


tram 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


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

edio 02 - maro/2007
Segunda edio com um acervo maior de artigos. Nesta edio so apresentados al-
guns 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 abor-
dam documentao de cdigo fonte, recursos de linha de comando, imagens e gera-
o de planilhas em excel. Na categoria segurana, artigos sobre autenticao de web-
mail e SMTP Injection.

www.phpmagazine.org.br

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 ex-
presso dentre as diversas comunidades de tecnologia.
verno do Paran; Companhia de Processamento de Da-
O evento reuniu mais de 7,4 mil participantes de 21
dos do Estado do Rio Grande do Sul (PROCERGS); Sindi-
pases no Centro de Eventos da PUCRS, o maior pblico
cato das Empresas de Informtica do Rio Grande do Sul
desde 2000, quando foi realizado o primeiro fisl. Nos trs
(SEPRORGS);
dias do evento houve debates, palestras, troca de infor-
maes e experincias, entre grupos de usurios, desen- O fisl contou com apoio das empresas: Baguete; A
volvedores, empresas pblicas e privadas que compare- Rede; Instituto Nokia de Tecnologia (INdT); Associao
ceram como participantes, expositores ou patrocinado- dos Jovens Empresrios de Porto Alegre (AJE); Sindicato
res. Foram 257 palestras, com nomes nacionais e inter- dos Bancrios; Instituto Projetos Pesquisas; Tangalo-
nacionais, que lotaram todas as oito salas destinadas aos mango; e Centro de Processamento de Dados (CPD) da
encontros. Universidade Federal do RS (UFRGS).
Participaram da Mostra de Solues as empresas: Solis
Para a coordenao do fisl9.0, esta edio com pbli-
Cooperativa de Solues Livres; Livraria Tempo Real In-
co recorde mostra a importncia que o software livre
formtica e Negcios; ZOPING; Trolltech ASA; Moradia e
vem conquistando no mundo todo e como o comparti-
Cidadania; Education Technolog; Red Hat Brasil; Socie-
lhamento de informaes pode beneficiar a toda a socie-
dade de Educao Ritter dos Reis; OpenS Tecnologia
dade. "Nosso desafio agora ser organizar o evento do
Ltda; Escola Alcides Maya; Linux Magazine; Unicamp;
ano que vem, quando pretendemos marcar de forma
Universidade Federal de Pernambuco; ThreePointsWeb;
ainda mais forte a presena do software livre na vida das
NetScience; ParanaCidade; BrOffice.org; LM2 Consulting;
pessoas, em funo dos 10 anos do fisl", diz Sady Jac-
PostgreSQL; DBSeller Servios de Informtica; Ory So-
ques, coordenador geral do Frum.
luctions Group; FAURGS; Centro de Empreendimentos
A meta da Associao Software Livre.Org, organiza- do Instituto de Informtica da UFRGS; CONEXUM; DFL;
dora do fisl, chegar a 10 mil participantes em 2009. SOL7; Laboratrio de Estudos Cognitivos (LEC); e Pro-
"Sabemos que um grande desafio, mas estamos nos jeto Germinar.
preparando para isso", afirma Jacques.
Alm do pblico recorde, o fisl9.0 teve a participao
Vamos aos nmeros
de empresas como Provncia Marista; UOL; Terra; Tele-
fnica; Google; Globo.com; Intel; Sun microsystems;
Yahoo Brasil; Comit Gestor da Internet no Brasil (CGI); Total de participantes: 7.417
Ncleo de Informao e Coordenao do Ponto br
(NIC.br); Companhia de Processamento de Dados do Pases: 21 (Alemanha, Argentina, Austrlia,
Municpio de Porto Alegre (PROCEMPA); Companhia de Blgica, Bolvia, Brasil, Canad, Chile, Cuba,
Informtica do Paran (CELEPAR); Empresa de Tecnolo- Espanha, Estados Unidos, Finlndia, Frana,
gia e Informaes da Previdncia Social (DATAPREV); Holanda, India, Inglaterra, Noruega, Paraguai,
Servio de Processamento de Dados (SERPRO); Caixa Portugal, Sua, Uruguai)
Econmica Federal; Banco do Brasil; Secretaria de Edu- Todos os estados brasileiros foram representa-
cao a Distncia (SEED); Ministrio da Cultura; Minist- dos no fisl.
rio da Cincia e Tecnologia; Ministrio da Educao; Mi-
nistrio do Planejamento, Oramento e Gesto; Propus; Perfil dos participantes: 24% so estudantes e
Locaweb; Servio Nacional de Aprendizagem Comercial 63% so profissionais e empresrios de TI;
(SENAC); Diginet; iSafe; Kroma Informtica; Logins; Pro-
Desk; ArgoHost.net; Brasil Telecom; Powerlogic; Minua- Patrocinadores: 41
no; Cobra Tecnologia; Casa Brasil; Petrobrs; Correios;
Ministrios das Comunicaes; Ministrio da Sade; Ins- Mostra de Solues: 28
tituto Nacional de Tecnologia da Informao (ITI); Go-

24 - 5a Edio - PHP Magazine


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 participan-
tes
Mais distante: Manaus ;

Grupos de Usurios: 48 (vindos de 8 estados brasilei-


ros e de outros 5 pases Paraguai, Argentina, Uruguai,
Bolvia e Chile);

Visitas a TV Software Livre: 3.175

Trfego de upload da TV Software Livre: 70 Gb

Trfego de download da TV Software Livre: 179 Gb

Conexes: 19 mil simultneas

Trfego de upload/download: 250 Gb

Visitas ao site do fisl durante o evento: 12.159

Arena de Programao Livre


Fase Remota = 35 inscritos
Qualifying = 32 presentes (8 equipes de 4
participantes)
Insanifying = 18 classificados (6 equipes de 3
participantes)

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

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.
es com as mais diversas responsabilidades. O incrvel
Ao todo foram trs dias de evento que deixaram um
desejo de queremos mais em 2009. Muito bem organi- que nem por isso a linguagem deixou de ser fcil. Hoje
zada, as apresentaes foram divididas em 14 trilhas, PHP o front-end de 80-90% das pginas da Internet.
com uma delas chamada Desenvolvimento: PHP, que Com aplicaes grandes de alta responsabilidade,
contou com 5 palestras de pessoas ilustres da comuni- iniciam-se anlises antes inviveis, comea-se a pensar
dade PHP do Brasil e do exterior. em otimizao mxima do script, em devolver o mnimo
Presente do incio ao fim, a equipe PHP Magazine possvel de HTML para o cliente, em analisar em deta-
no podia deixar de registrar as palestras de nosso inte- lhes e medir os tempos do trfego HTTP e da resposta
resse especfico. Agradecemos os autores pelo incenti- do servidor, do processamento de cada binrio ou biblio-
vo e colaborao para este resumo, bem como a cola- teca que estiver envolvida. Aplicaes de grande respon-
borao de Fernando Fischer e Ubiratan de Carvalho. sabilidade exigem cuidados muito especficos.
Infelizmente, no conseguimos acompanhar a palestra
Desenvolvendo portais com o Drupal: Estudo de caso Para ajudar-nos existe o YSlow, que um comple-
dos portais dos Democratas. Fica aqui o nosso pedido mento para a extenso FireBug que roda no Mozilla
de desculpas. A seguir, um apanhado dos principais Firefox. O YSlow foi desenvolvido pela Yahoo! para facili-
pontos abordados em cada apresentao. tar a anlise e, com isso, saber em que pondo agir bus-
cando o melhor tempo de resposta.
Large Scale PHP Precisamos de mudanas em nossos hbitos de pro-
gramar. A simples substituio de require_once por
Autor: Rasmus Lerdorf
require j representa uma melhora de performance,
Rasmus Lerdorf, que desenvolveu a primeira verso pois ser um processamento a menos. Por isso, tenha
da linguagem de programao PHP, apresentou neste um olhar clnico e faa da maneira mais simples possvel.
FISL um pouco da histria do PHP, passando para a oti- Evite o uso de frameworks que tendem a ser grandes e
mizao de scripts e do ambiente do servidor em geral e complexos quando no so necessrios.
por ltimo focou em segurana, demonstrando de modo
Servios de alta responsabilidades ou apenas siste-
prtico um ataque de XSS.
mas complexos tendem a ter variveis em to grande
No estado vicioso de nosso trabalho acabamos no nmero que em algum momento ficam incontrolveis e
lembrando como as coisas comearam, reclamamos da neste descontrole pode-se abrir uma brecha na seguran-
falta de padronizao das funes, da capacidade ou a. Por isso, never click on a link! (nunca clique em um
no da orientao a objetos, se deveriam ou no deixar link!), pois voc internauta no sabe o que processado
de existir os alis para as funes... Imagine que o no servidor e no seu navegador no momento daquele
incio disso tudo foi l por 1994 ou 1995. Naquela poca clique. Na realidade no h como garantir a segurana.
a realidade era outra: outro pblico com acesso a Inter-
Quando se abre uma URL estamos sujeitos a scripts
net, outros softwares para acessar as pginas. A internet
que agem nos bugs do nosso navegador. Estamos sujei-
era texto e poucas responsabilidades com dinamicidade.
tos a sermos usados para propagar links maliciosos. A
Com o passar do tempo as exigncias aumentaram, a soluo novamente simples: filtrar par garantir que os
linguagem evoluiu muito e de modo descentralizado, dados que estamos recebendo realmente so os que
dificultando vrias normatizaes e resultando em fun- esperamos receber.

26 - 5a Edio - PHP Magazine


Lio final: Faa o mais performtico que puder, ga-
rantindo a integridade do sistema e o mximo de segu-
rana para o usurio. Rasmus deixou os slides no se- Prevenindo XSS: Execute apenas o SEU
guinte endereo: http://talks.php.net/show/fisl08 . cdigo
Autor: Er Galvo Abbott
Duro de Errar 5.0 - Tratamento, Controle Um dos assuntos mais destacados no momento so
e Configurao de erros em PHP 5 ataques por XSS, ou seja, injeo de cdigos dentro de
nossa aplicao. Er Galvo Abbott, que j havia falando
Autor: Marcelio Leal sobre segurana no FISL, este ano voltou a expor o as-
sunto. Galvo tambm j publicou na 3 edio da PHP
Marcelio Leal trouxe um assunto que ningum quer
Magazine, no deixe de conferir Segurana no PHP Os
deparar-se: os erros, as excees e os bugs em nossos
6 requisitos mnimos.
programas PHP, junto a isso algumas configuraes e
mtodos do PHP para melhorar sua visualizao e geren- Ataques de XSS so tentativas de embutir, ou seja,
ciamento. de fazer nossa pgina executar cdigos (normalmente
JavaScript e HTML) de forma intrusiva, causando ou da-
Apresentou-nos os nossos direitos. O direito 0 diz
nos visuais ou, na pior hiptese, fazendo processar co-
que devemos ter a liberdade de errar e conseguir enten-
mandos invisveis ao usurio, mas que agem de modo
der o erro. Nesse ponto comentou-se que o PHP muito
obscuro.
bom, pois indica de forma clara qual foi o erro e onde
que ele ocorreu. Novamente a soluo simples: garantir-se de que
os dados que recebemos ou enviamos esto no formato
No arquivo php.ini h algumas diretivas relaciona-
que esperamos que estejam. Tal regra vale para dados
das a erros. Tais diretivas devem ser diferenciadas em
vindos por $_COOKIE, $_SESSION, $_POST, $_GET ou
ambiente de desenvolvimento, no ambiente de testes e
$_REQUEST. Tambm devem ser tratados os dados ori-
no ambiente de produo. No ambiente de desenvolvi-
ginados do banco de dados e que chegam at nossa
mento mostra-se todos os erros, warnigs e notices, alm
aplicao
das possveis funes que depreciaro e incompatibilida-
des futuras. Temos assim uma riqueza de informaes Costumamos nos preocupar com os dados que rece-
que nos auxilia a fazer o cdigo da maneira mais perfeita bemos por parte do usurio, mas acabamos esquecendo
possvel. No ambiente de produo a recomendao de tratar os dados que so inseridos em nossa aplicao
no mostrar erros e guard-los em logs, ou trat-los por vindos do banco de dados e simplesmente exibidos. Se
funes especializadas. esses dados tiverem scripts, eles provavelmente sero
executados e podem comprometer o sistema ou dados.
A customizao ainda depende da experincia do de-
senvolvedor. Um desenvolvedor com mais experincia Segundo Galvo, a incapacidade tcnica no o ni-
pode configurar para que vejam apenas os erros que co problema. O que ocorre que o erro de segurana
lhes so interessantes. Essa uma flexibilidade do PHP identificado, mas no corrigido por falta de tempo e por
que pode ser explorada. menosprezarmos os danos que podem ser causados.
Cabe nesse momento um pouco mais de compromisso
O bloco try/catch foi reforado, pois, embora seja
nos trabalhos j finalizados por parte do desenvolvedor.
de um uso muito simplificado, pouco aplicado na prti-
Isso no especifico para PHP, pois o problema gen-
ca. Sabemos que os erros da maneira original apresen-
rico.
tam-se sem sentido algum para o usurio e, para piorar,
pode se tornar at um problema de segurana, depen- Os slides esto no site do autor: http://
dendo de como se apresenta o erro em ambiente de www.galvao.eti.br em keynotes.
produo. Afinal, nada como poder reagir diante de uma
situao de erro.
H ainda a triger_error em que podemos criar erros Implementando Enterprise Patterns em
em tempo de execuo, com mensagens claras PHP
(objetivas em relao ao sistema) e tratar com
set_error_handler. Autor: Pablo Dall'Oglio
Fica clara a necessidade de testar por diversas vezes Pablo DallOglio brincou que contava sua idade pela
as rotinas, ou melhor, usar o prprio computador para quantidade de participaes na FISL e falou de um as-
testar a pgina. Nesse momento apresenta-se o phpUnit sunto que muito nos interessa: os patterns de acesso a
e o Selenium, ambas ferramentas que permitem auto- dados. Em sua palestra foram comentados e demonstra-
matizar testes. dos os principais modelos.
Marcelio tambm disponibilizou os slides em http:// A atualidade corporativa requer que o desenvolvedor
marcelioleal.wordpress.com/2008/04/22/duro-de-errar- conhea alguns nomes que cercam a rea. Conhecimen-
50/ . to importante, sem dvidas, pela objetividade que pro-
porciona, uma vez que a regra de negcio no precisa

PHP Magazine - 5a Edio - 27


ser explicada, basta ser denominada, por j ser um pa- em um modelo aplicado que realmente prov flexibilida-
dro. Padro este que, por vezes, usamos e no sabe- de e organizao do cdigo-fonte.
mos.
Os slides esto disponveis no site do Pablo Pablo
De forma simplificada, um padro criado quando DallOglio: http://www.pablo.blog.br/talks. Recomenda-
uma determinada tarefa ou modo de resolv-la usado se a leitura do livro do autor: PHP Programando com
por mais de uma vez. Objetiva-se, ento, que seja apli- Orientao a Objetos.
cvel sempre que aquela situao ocorrer. Design pat-
terns no inveno da rea de informtica.
Os padres demonstrados favorecem o uso do mode- Concluses
lo MVC, separando a persistncia da camada visual e dos
controles. No caso usamos bancos de dados relacionais. Com a migrao de softwares desktop para internet,
Ento, como fazer para que um padro orientado a obje- tentando aproveitar-se do ambiente colaborativo, h
to seja usado em um banco de dados que no seja? A cada vez mais aplicaes com necessidade de alta per-
soluo colocar nas classes as regras de negcio e se- formance, escalabilidade, disponibilidade e segurana. O
parar at nas classes de persistncia o que diz respeito site virou aplicao e a rede de pesquisa da ARPANET
direto ao banco de dados e o que so regras. Neste mo- virou uma oportunidade para negcios.
mento entra o conceito de gateways. Em geral, as palestras do frum na rea de PHP no
Os patterns apresentados foram: Table Data Gate- trouxeram novidades, mas todas elas focaram na quali-
way, Row Data Gateway, Active Record, Layer Supertype dade. Que no prximo FISL possamos ver os resultados
e o Repository Pattern. Os padres foram apresentados destes esforos!
partindo-se das premissas mais simples at se chegar

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 pa-
ra submisso de artigos para a revista. No
esquea o deadline: 25/09/2008.
www.phpmagazine.org.br

28 - 5a Edio - PHP Magazine

Você também pode gostar