Protegendo seu código de um ataque XSS

post

Esta semana vários websites conhecidos como o Twitter, Orkut e o YouTube sofreram com ataques XSS.

O XSS (Cross-site scripting) é um tipo de vulnerabilidade encontrado normalmente em aplicações web que permite que crackers injetarem scripts client-side em páginas visualizadas por outros usuários. Os ataques de XSS somam aproximadamente 80% de todas as vulnerabilidades documentadas pela Symantec desde 2007. O impacto no website pode variar de um pequeno incômodo a um risco de segurança significativo, dependendo da sensibilidade dos dados tratados pelo website vulnerável e a natureza das eventuais reduções de segurança implementadas pelo proprietário do mesmo.

Ataque

Através de um XSS, o cracker injeta códigos JavaScript em um campo texto de uma página já existente e este JavaScript é apresentado para outros usuários.

Imagine que você tenha um campo de texto simples, para que o usuário possa atualizar seu status (What’s happening?) e uma tela para exibir esse status assim:

1
2
# form
<%= f.text_field :status -%>

1
2
# view
<%= @user.status -%>

Se um usuário malicioso preencher com:


<script>alert("Follow me on Twitter: @ozeias")</script>

Se não há nenhuma proteção contra XSS, cada vez que um usuário abrir a página, vai ver o alerta:

post

Proteção

Até o Rails 2.3, para sanitizar qualquer entrada gerado pelo usuário, utiliza-se o método h().

1
2
# view
<%= h @user.status -%>

No Rails 3, por padrão, toda saída é automaticamente sanitizada e por isso não há necessidade de colocar o método h(). Caso você queira exibir a string sem sanitizar, use o método raw():

1
2
# view
<%= raw @user.status -%>

Para quem tem aplicação em produção usando Rails 2.3 e não quer correr o risco de esquecer de sanitizar alguma entrada de usuário, pode utilizar o plugin RailsXSS, instalando-o no seu projeto:


./script/plugin install git://github.com/rails/rails_xss.git

Este é um assunto importante que quem desenvolve para a web precisa entender e lembrar de sempre sanitizar qualquer entrada gerada pelo usuário e isso provavelmente vai lhe poupar muito tempo no futuro.

Mais informações

Foto by Defensor Fortis

Recommend me on WWR

Comentários
masssa e super importante abraco

Sorry, comments are closed for this article.