quinta-feira, 14 de agosto de 2008

String Sanitize - Como previnir XSS em páginas que usam AJAX

Quem nunca precisou varrer uma string para substituir alguns caracteres inválidos?

Ontem à noite, me deparei com o seguinte problema:
Possuía uma página que recebia um objeto javascript, este, porém, possuía uma propriedade que receberia um valor previamente informado pelo usuário.

Exemplo:


De cara, nota-se uma possível falha de segurança, imagine caso um usuário mal intencionado informasse um valor como:

xss', poison:function(){alert('xss')}(), foo: '

A minha resposta seria:



Que como vocês podem notar, ainda é um objeto javascript válido, porém esta envenenado com xss.

Caso eu desejasse consumir este objeto na página, receberia uma mensagem de alerta durante o eval.

Para corrigir este problema desenvolvi esta pequena função em VB.NET



Que simplesmente substitui os caracteres especiais por suas representações Unicode ref http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Guide:Unicode

Então, apos este método, quando recebo strings envenenadas meu objeto Javascirpt fica assim:



Espero que ajude, abraços

Nenhum comentário: