Cross-Site Scripting (XSS)

Definição

Cross-Site Scripting (XSS) é uma vulnerabilidade que permite a injeção de scripts maliciosos em páginas web visualizadas por outros usuários.
Geralmente, o atacante insere código JavaScript em campos de entrada que, se não forem devidamente tratados, são interpretados e executados pelo navegador da vítima.

O XSS permite roubo de cookies, redirecionamento para sites falsos, execução de comandos no contexto do navegador da vítima, entre outras ações maliciosas.

Existem três tipos principais de XSS:

  • Refletido: o script é executado imediatamente na resposta da requisição.
  • Armazenado: o script malicioso é salvo no servidor e entregue a vários usuários.
  • DOM-based: o script é injetado e executado exclusivamente no lado do cliente, via manipulação de DOM.

Objetivos da Prevenção de XSS

  • Impedir a execução de scripts não autorizados no navegador do usuário.
  • Proteger dados sensíveis e sessões autenticadas.
  • Evitar sequestro de identidade, phishing e redirecionamentos maliciosos.
  • Melhorar a confiança e a segurança da aplicação frente a usuários e navegadores modernos.

Exemplo de ataque XSS refletido

Imagine um campo de busca que exibe o termo pesquisado sem sanitização:

<p>Você pesquisou por: <span id="termo">{{ termo }}</span></p>

Se o usuário inserir:

<script>alert("XSS");</script>

A página resultante será:

<p>
  Você pesquisou por: <span id="termo"><script>alert("XSS");</script></span>
</p>

O navegador interpreta esse conteúdo como código JavaScript válido e executa o alert("XSS"), em vez de exibir o texto como conteúdo da página.

Isso acontece porque os dados inseridos pelo usuário foram incluídos diretamente no HTML, sem qualquer escape ou sanitização. Assim, o navegador trata a entrada como código legítimo e o executa — o que pode ser explorado por um atacante para executar ações maliciosas no navegador da vítima (como roubo de cookies, redirecionamentos, etc).

Como prevenir

  • Escape de caracteres especiais em HTML, JavaScript, URLs e atributos.

  • Sanitização dos dados de entrada e saída.

  • Uso de frameworks com proteção embutida (ex: Vue, React, Angular).

  • Validação de conteúdo permitido (whitelists).

  • Uso de CSP (Content Security Policy) para limitar scripts externos.

  • Nunca inserir dados do usuário diretamente no HTML sem filtro.

Exemplo seguro — escape automático com template seguro (Jinja2)

from flask import Flask, render_template_string, request

app = Flask(__name__)

@app.route("/")
def home():
    termo = request.args.get("q", "")
    html = "<p>Você pesquisou por: {{ termo }}</p>"
    return render_template_string(html, termo=termo)

O ciclo da prevenção de XSS

[Entrada do usuário] → [Sanitização e escape] → [Renderização segura no navegador] → [Sem execução de código malicioso]

O segredo é nunca confiar em dados vindos do usuário, mesmo que pareçam inofensivos.

Relacionados

Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com