quinta-feira, dezembro 06, 2007

XSS - Proteger com remendos não chega...

Imaginemos o site "xpto" que numa tentativa de se proteger contra ataques XSS filtra alguns inputs dos utilizadores, como por exemplo a função alert() do Javascript.
Fazendo alguns testes nesse site, verificamos que de facto o seguinte input não passa:

;alert("owned!");

Mas o seguinte já passa:

;alert"owned";

Este segundo input, do modo que está não faz rigorosamente nada. No entanto com um pequeno ajuste, mais especificamente apontadores de funções, conseguimos injectar a função alert() na mesma, ultrapassando o filtro do site:

;var xpto=alert;xpto("owned!");

Acontece que o site xpto não é imaginário, e existem muitos como ele por aí. E em vez de se perder tempo a bloquear uma das centenas de maneiras de iniciar um ataque, o ideal seria resolver o problema de raiz.