O que é cross-site scripting?

Um ataque cross-site scripting engana um navegador web para executar código malicioso.

Objetivos de aprendizado

Após ler este artigo, você será capaz de:

  • Entender cross-site scripting
  • Definir código do lado do cliente
  • Descrever as consequências dos ataques de cross-site scripting
  • Explicar a diferença entre cross-site scripting refletidos e persistentes
  • Listar estratégias para mitigar cross-site scripting

Copiar o link do artigo

O que é cross-site scripting?

O cross-site scripting (XSS) é uma exploração em que o invasor anexa um código a um site legítimo que será executado quando a vítima carregar o site. Esse código malicioso pode ser inserido de várias maneiras. Mais popularmente, ele é adicionado ao final de um URL ou postado diretamente em uma página que exibe conteúdo gerado pelo usuário. Em termos mais técnicos, o cross-site scripting é um ataque de injeção de código do lado do cliente.

Ataque de Cross-Site Scripting

O que é código do lado do cliente?

Código do lado do cliente é o código JavaScript que é executado na máquina de um usuário. Em termos de sites, o código do lado do cliente geralmente é um código executado pelo navegador web depois que o navegador carrega uma página da web. Isso contrasta com o código do lado do servidor, que é executado no servidor web do host. O código do lado do cliente é muito útil com páginas da web interativas; o conteúdo interativo é executado de forma mais rápida e confiável, pois o computador do usuário não precisa se comunicar com o servidor web toda vez que há uma interação. Os jogos baseados em navegador são uma plataforma popular para código do lado do cliente, pois o código do lado do cliente pode garantir que o jogo funcione sem problemas, independentemente dos problemas de conectividade.

O código que executa o lado do cliente é muito popular no desenvolvimento da web atual e é utilizado na maioria dos novos sites. Como o código entre sites é um elemento básico da web atual, o cross-site scripting se tornou uma das vulnerabilidades de segurança cibernética mais relatadas e os ataques de cross-site scripting atingiram sites importantes como YouTube, Facebook e Twitter.

O que é um exemplo de cross-site scripting?

Um exemplo útil de ataques de cross-site scripting é comumente visto em sites que possuem fóruns de comentários não validados. Nesse caso, um invasor postará um comentário que consiste em código executável envolto em tags ''<script></script>". Essas tags informam a um navegador web que interprete tudo entre as tags como código JavaScript. Assim que esse comentário estiver na página, quando qualquer outro usuário carregar esse site, o código malicioso entre as tags de script será executado pelo navegador web e o usuário se tornará vítima do ataque.

Como um invasor pode usar cross-site scripting para causar danos?

Os ataques de cross-site scripting de JavaScript são populares porque o JavaScript tem acesso a alguns dados sensíveis que podem ser usados para roubo de identidade e outros fins maliciosos. Por exemplo, o JavaScript tem acesso a cookies* e um invasor pode usar um ataque XSS para roubar os cookies de um usuário e se passar por ele on-line. O JavaScript também pode criar solicitações HTTP, que podem ser usadas para enviar dados (como cookies roubados) de volta ao invasor. Além disso, o JavaScript do lado do cliente também pode ajudar um invasor a obter acesso a APIs que contêm coordenadas de geolocalização, dados de webcam e outras informações sensíveis.

Um típico fluxo de ataque cross-site scripting é o seguinte:

  1. A vítima carrega uma página da web e o código malicioso copia os cookies do usuário
  2. O código então envia uma solicitação HTTP para o servidor web de um invasor com os cookies roubados no corpo da solicitação.
  3. O invasor pode então usar esses cookies para se passar pelo usuário nesse site para fins de um ataque de engenharia social ou até mesmo para acessar números de contas bancárias ou outros dados sensíveis.

*Cookies são credenciais de login temporárias salvas no computador de um usuário. Por exemplo, quando um usuário faz login em um site como o Facebook, o site fornece um cookie para que, se ele fechar a janela do navegador e voltar ao Facebook mais tarde naquele dia, ele é automaticamente autenticado pelo cookie e não precisa fazer login novamente.

Quais são os diferentes tipos de cross-site scripting?

Os dois tipos mais populares de ataques de cross-site scripting são o cross-site scripting refletido e os cross-site scripting persistente.

Cross-site scripting refletido

Este é o ataque de cross-site scripting mais comumente visto. Com um ataque refletido, um código malicioso é adicionado ao final do URL de um site; muitas vezes este será um site legítimo e confiável. Quando a vítima carrega este link em seu navegador web, o navegador executará o código injetado no URL. O invasor geralmente usa alguma forma de engenharia social para induzir a vítima a clicar no link.

Por exemplo, um usuário pode receber um e-mail de aparência legítima que afirma vir de seu banco. O e-mail solicitará que ele adote alguma ação no site do banco e fornece um link. O link pode ser assim:

http://legitamite-bank.com/index.php?user=<script>here is some bad code!</script>

Embora a primeira parte do URL pareça seguro e contenha o domínio de um site confiável, o código injetado no final do URL pode ser malicioso.

Cross-site scripting persistente

Isso acontece em sites que permitem que os usuários publiquem conteúdo que outros usuários verão, como um fórum de comentários ou site de rede social, por exemplo. Se o site não validar adequadamente as entradas para conteúdo gerado pelo usuário, um invasor poderá inserir um código que os navegadores de outros usuários executarão quando a página for carregada. Por exemplo, um invasor pode acessar um site de namoro on-line e colocar algo assim em seu perfil:

"Olá! Meu nome é Dave, gosto de longas caminhadas na praia e <script> código malicioso aqui</script>"

Qualquer usuário que tentar acessar o perfil do Dave se tornará vítima do ataque de cross-site scripting persistente do Dave.

Como evitar o cross-site scripting

Não existe uma estratégia única para mitigar cross-site scripting e diferentes tipos de aplicativos web exigem diferentes níveis de proteção. Uma série de medidas de proteção podem ser tomadas, descreveremos algumas abaixo.

Se possível, evitar HTML nas entradas - Uma maneira muito eficaz de evitar ataques de cross-site scripting persistentes é impedir que os usuários postem HTML em entradas de formulário. Existem outras opções que permitem aos usuários criar conteúdo rico sem o uso de HTML, como editores de markdown e WYSIWYG.

Validar as entradas - Validação significa implementar regras que evitem que um usuário poste dados em um formulário que não atendem a determinados critérios. Por exemplo, uma entrada que solicita o “Sobrenome” do usuário deve ter regras de validação que permitam apenas que o usuário envie dados compostos por caracteres alfanuméricos. As regras de validação também podem ser definidas para rejeitar quaisquer tags ou caracteres comumente usados em cross-site scripting, como tags “<script>”.

Higienização de dados - A higienização de dados é semelhante à validação, mas ocorre após os dados já terem sido postados no servidor web, mas ainda antes de serem exibidos para outro usuário. Existem várias ferramentas on-line que podem higienizar o HTML e filtrar quaisquer injeções de código malicioso.

Adotar medidas de segurança de cookies - Os aplicativos web também podem definir regras especiais para o manuseio de cookies que podem mitigar o roubo de cookies por meio de ataques cross-site scripting. Os cookies podem ser vinculados a endereços de IP específicos para que os invasores de cross-site scripting não possam acessar. Além disso, podem ser criadas regras para bloquear completamente o JavaScript de acessar os cookies.

Definir regras de WAF - Um WAF também pode ser configurado para impor regras que evitarão cross-site scripting refletidos. Essas regras WAF empregam estratégias que bloquearão solicitações estranhas ao servidor, incluindo ataques de cross-site scripting. O Cloudflare WAF oferece instalação pronta para uso e protege aplicativos web contra cross-site scripting, ataques DDoS, injeção de SQL e outras ameaças comuns.