Escolar Documentos
Profissional Documentos
Cultura Documentos
com>
sumrio
editorial
Apresentao Equipe Caixa de Entrada Chamadas
artigos
PHP e o Conhecimento Cientfico ao redor do mundo
por Leandro Schwarz
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
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.
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.
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.
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.
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].
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].
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.
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-
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.
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-
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); ?>
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-
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
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.
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
segurana
por Ismael Rocha
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.
} $query = r FROM noticias $consulta = $linhas = "SELECT titulo, conteudo, auto WHERE id=$id"; mysql_query($query); mysql_num_rows($consulta);
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>"; } ?>
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.
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.
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
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.
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.
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.
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
arquitetura
por Almir Neto e Otvio Calaa
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
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/
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
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-
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
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.
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-
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); }
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.
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 ).
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
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.
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
review
Por Helton Ritter
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.
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 .
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.
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