VidaGeek.net

Linux, Open-source, Programação e Produtividade

Archive for February, 2008

E se alguém trocar a sua id do AdSense?

Sem dúvida alguma, a maior parte da publicidade online hoje é feita usando-se o AdSense da Google. Isso não é nenhum problema, afinal o AdSense é uma das ferramentas de anúncios que tem o melhor retorno financeiro para quem a utiliza. Mas e a segurança?

Imagine que você é um blogueiro profissional que tem como principal fonte de renda o AdSense. Da noite para o dia você vê sua receita desabando. O que você faz? Investe pesado em SEO e geração de conteúdo novo. Sua receita parece reagir mas volta a cair vertiginosamente. Você consulta todas as suas ferramentas de monitoração do seu site e nota que o número de visitas não diminuiu, apenas parece que ninguém clica mais em seus anúncios.

Já desesperado e vendo a falência correr em sua direção, você nota que um leitor do seu blog comentou praticamente todos os seus posts na última semana. Os comentários até são relevantes, mas você os apaga e vê que o blog volta a dar retorno financeiro.

Qual a relação daqueles comentários com sua receita? Toda.

Provavelmente todo mundo já ouviu falar de injeção de Javascript em uma página, mas vou explicar rapidamente o que é:

Um usuário mal intencionado, após tentar de diversas formas, descobre um jeito de incluir código Javascript na sua página (Em muitos sistemas isso significa apenas abrir e fechar a tag <script> em um formulário e depois submeter) e usa isso para mudar o comportamento do site.

Javascript é uma linguagem absurdamente poderosa e flexivel (vejam JQuery e Prototype, por exemplo). Além desse poder todo, o navegador constrói uma estrutura com todos os elementos da página que pode ser manipulada livremente por Javascript.

Juntando tudo isso em um bolo só, temos um ataque formidável e de difícil detecção. Como funcionaria esse ataque (aqui pensando apenas num blog, mas a idéia é extensível para muitos outros lugares)? Simples:

  1. Descobre-se uma forma de injetar Javascript na página através dos comentários.
  2. Injeta-se o script junto com um comentário razoável em relação ao post.
  3. Quando o post é exibido e o script é rodado, ele varre a página procurando pela id do AdSense e troca por outra (a do usuário).
  4. Sempre que alguém clicar em um anúncio, o clique será atribuído à id nova, e não à do dono do blog.

E acreditem, é realmente muito fácil fazer um script desses. Mas por que isso funciona?

Como os usuários do AdSense já devem ter notado, você não precisa cadastrar todos os sites onde sua id vai aparecer. Isso significa que a Google não tem como saber qual id deve vir de qual site. Um exemplo disso (mas esse é legal) é um desses plugins para inserir AdSense no WordPress. Em um checkbox você pode destinar para o autor do plugin 5% dos cliques em anúncio que você tiver. Ele faz isso colocando a id dele em 5% dos anúncios.

Mas a Google deveria encontrar um jeito de bloquear isso? Creio que não. Isso é uma característica do AdSense que o deixa bem flexível.

O verdadeiro problema é a injeção de script. Esse é um pesadelo do mundo atual. Sempre que você recebe os dados de uma fonte insegura (no caso qualquer conteúdo gerado por usuários), você deve limpá-lo e garantir que não exista nada que possa comprometer o seu sistema.

Mas isso raramente é feito de forma efetiva (quando é feito…), o que resulta em sites expostos. Já passou muito da hora dos programadores (em especial os que desenvolvem para web) se preocuparem em evitar o bom e velho “‘;DROP TABLE Funcionario;” que alguém colocou em um formulário qualquer por diversão.

Nota: Não me lembro de ter visto em lugar algum alguém mencionar um ataque como esse que eu descrevi acima, mas isso não significa que ninguém já esteja usando idéias semelhantes a essa. Segurança é um assunto importante que deve ser mais discutido.

Posts Relacionados:

  • AdSense Flood
  • Google em Inglês
  • INC - Bloco Estático
  • FeedBurner e Google
  • Retrospectiva 2008
  • Jogos para Geeks: Settlers of Catan
  • FISL 8.0: Entrevista com Guilherme Silveira, um dos ganhadores da Arena
  • Acompanhe-nos por RSS, por Email ou via Twitter.
    Veja como ter um desconto no Dreamhost: um excelente servidor web.

    Aprenda Comandos Básicos de Linux

    Terminal
    Para os iniciantes os comandos de shell do linux podem ser um tanto quanto confusos. Isso porque muitos não têm nome intuitivo (como o cat - gato em inglês - que mostra um arquivo no terminal) e a quantidade de comandos e parâmetros a decorar para fazer as coisas mais básicas no terminal é muito grande. Apesar de podermos fazer muitas coisas, principalmente por causa dos pipes, muito programas são desconhecidos e no fim das contas acabamos reinventado a roda quando não sabemos um deles. Por exemplo, apenas recentemente aprendi a usar o find e o wc que encontra arquivos e conta palavras/linhas respectivamente. Sugerimos então uma dica para quem gostaria de aprender alguns comandos de terminal já que, ao meu ver, é uma grande perda usar um sistema Linux e não saber os comandos básicos, já que o terminal pode agilizar muito o seu trabalho.

    (more…)

    Posts Relacionados:

  • Aprendendo Bash
  • Livro grátis de Ubuntu
  • YACP - Aprendendo a usar suas ferramentas
  • Gerando memória swap on-the-fly
  • Truques do Bash
  • Visual Basic no Linux
  • Retrospectiva 2008
  • Acompanhe-nos por RSS, por Email ou via Twitter.
    Veja como ter um desconto no Dreamhost: um excelente servidor web.

  • 11 Comments
  • Filed under: Gentoo, Linux, Ubuntu
  • INC - Isso Não Compila!!!

    Semana passada eu comecei a estudar para a certificação de programador Java da Sun (SCJP). Como estou vendo algumas coisas bem diferentes do java-arroz-com-feijão que todo mundo conhece, estarei postando sobre isso nas próximas semanas (e assim eu não serei o único ficando com os cabelos brancos).

    Algumas coisas do que vou falar na verdade nem caem na prova de certificação, mas são bem interessantes. Vamos lá então.

    
    class A {
    	public void x(){
    		//Uma implementação qualquer
    	}
    }
    
    abstract class B extends A {
    	@Override
    	abstract public void x();
    }
    
    class C extends B {
    	@Override
    	public void x(){
    		//Outra implementação qualquer
    	}
    }
    

    Olhem que divertido. A classe A declara e implementa x(). A classe B sobrescreve o método x() de A com um método abstrato. A classe C, que não é abstrata então é obrigada a implementar o método x().

    É interessante o java permitir que você sobrescreva um método com um método que nem implementação tem ainda.

    Você ainda poderia modificar um pouco o código e fazer com que o método da classe C fosse final que tudo ainda continuaria compilando. Mágico, não?

    Posts Relacionados:

  • INC - Colisão de Nomes de Métodos
  • INC - Pequeno + Pequeno == Grande?
  • INC - Long Switch?
  • JSF - Java’s Signal of Failure
  • Nokia ConnectUsp conecta mas não navega
  • Por que filtrar ips não deu certo
  • Retrospectiva 2008
  • Acompanhe-nos por RSS, por Email ou via Twitter.
    Veja como ter um desconto no Dreamhost: um excelente servidor web.

  • 1 Comment
  • Filed under: Dicas, Java, Programacao
  • Computadores e Ecologia

    Energia elétricaRecentemente, assisti o documentário “Uma Verdade Inconveniente”, do Al Gore (uma vez candidato à presidência dos EUA). Isso me inspirou a escrever esse artigo, comentando sobre algumas coisas que nós, computeiros computólogos, podemos fazer pelo nosso meio ambiente.

    Um dos maiores problemas com computadores é que eles gastam muita energia elétrica. Para se ter uma idéia, um desktop ligado pode consumir até 600 Wh no pior caso, quando o computador está com carga total (por exemplo, durante a execução de um jogo) e um monitor grande e/ou antigo está em uso. Os maiores responsáveis pelo gasto de energia no computador são, sem dúvida, o monitor e o processador, seguidos pela GPU.

    Junte a isso as luzes do ambiente em que você trabalha e os periféricos ligados mas utilizados com pouca freqüência (impressoras, principalmente), e você terá um consumo que pode chegar aos 800 Wh.

    Para diminuir o consumo, eis alguns conselhos:

    • Desligue o monitor sempre que não estiver usando o computador; de preferência, desligue o computador também, mas se você pretende retornar em breve, coloque-o no modo de espera.
    • Ligue os periféricos apenas quando for usá-los. Quando não estiverem em uso, desligue-os da tomada.
    • Prefira monitores LCD aos antigos de tubo (CRT); são mais econômicos, além de não agredirem sua visão.
    • Se possível, troque seu computador de mesa por um notebook. Notebooks consomem bem menos energia (em torno de 50 Wh).
    • Utilize lâmpadas econômicas no local onde o computador ficar.
    • Se pensa em utilizar o computador para jogos, prefira um videogame. Além de serem feitos especificamente para jogos, são mais econômicos que os computadores (menos o PS3, que gasta quase tanto quanto um PC), mesmo considerando o gasto da televisão junto.

    Fora o consumo de energia, todos nós podemos tomar medidas para diminuir nossa agressão ao meio ambiente. Veja alguns links sobre o assunto:

    • An Inconvenient Truth: site do documentário. Contém informações sobre o documentário e sobre como diminuir sua taxa de emissão de carbono. Em inglês.
    • Story of Stuff: site com um documentário rápido (20 min.) sobre o destino das coisas. Muito interessante! Em inglês. Obrigado ao Fabricio Sousa Nascimento pelo link.
    • Natureba: site sobre as diversas medidas que podemos tomar para diminuir o estrago no meio ambiente. Em português.

    Posts Relacionados:

  • Inteligência Artificial
  • Cuba Libre
  • Retrospectiva 2008
  • A nova definição de Tecnologia
  • Um dia de usuário
  • Combatendo Spammers
  • Dell se junta a Novell/Microsoft
  • Acompanhe-nos por RSS, por Email ou via Twitter.
    Veja como ter um desconto no Dreamhost: um excelente servidor web.

  • 5 Comments
  • Filed under: Dicas, Opiniao