O cross-site scripting (XSS) continua sendo uma das vulnerabilidades mais prevalentes na web. A nova API padronizada do Sanitizer fornece uma maneira direta para os desenvolvedores da Web higienizarem HTML não confiável antes de inseri-lo no DOM. O Firefox 148 é o primeiro navegador a oferecer esta API padronizada de aprimoramento de segurança, promovendo uma web mais segura para todos. Esperamos que outros navegadores sigam o exemplo em breve.
Uma vulnerabilidade XSS surge quando um site permite inadvertidamente que invasores injetem HTML ou JavaScript arbitrários por meio de conteúdo gerado pelo usuário. Com esse ataque, um invasor pode monitorar e manipular as interações do usuário e roubar continuamente os dados do usuário enquanto a vulnerabilidade permanecer explorável. O XSS tem um longo histórico de ser notoriamente difícil de prevenir e está classificado entre as três principais vulnerabilidades da web (CWE-79) há quase uma década.
O Firefox tem estado profundamente envolvido em soluções para XSS desde o início, começando com a liderança do padrão Content-Security-Policy (CSP) em 2009. O CSP permite que os sites restrinjam quais recursos (scripts, estilos, imagens, etc.) o navegador pode carregar e executar, fornecendo uma forte linha de defesa contra XSS. Apesar de um fluxo constante de melhorias e manutenção contínua, o CSP não obteve adoção suficiente para proteger a longa cauda da web, pois exige mudanças arquitetônicas significativas para sites existentes e revisão contínua por especialistas em segurança.
A API Sanitizer foi projetada para ajudar a preencher essa lacuna, fornecendo uma maneira padronizada de transformar HTML malicioso em HTML inofensivo — em outras palavras, para higienizá-lo. O definirHTML() O método integra a sanitização diretamente na inserção de HTML, fornecendo segurança por padrão. Aqui está um exemplo de limpeza de um HTML simples e inseguro:
document.body.setHTML(`Esta sanitização permitirá que o HTML elemento ao remover o incorporado elemento e seu ao clicar atributo, eliminando assim o ataque XSS resultando no seguinte HTML seguro:
Os desenvolvedores podem optar por proteções XSS mais fortes com alterações mínimas de código, substituindo atribuições innerHTML propensas a erros por setHTML(). Se a configuração padrão do definirHTML() for muito rigoroso (ou não suficientemente rigoroso) para um determinado caso de uso, os desenvolvedores podem fornecer uma configuração personalizada que defina quais elementos e atributos HTML devem ser mantidos ou removidos. Para experimentar a API Sanitizer antes de apresentá-la em uma página da web, recomendamos explorar o playground da API Sanitizer.
Para proteções ainda mais fortes, a API Sanitizer pode ser combinada com Trusted Types, que centralizam o controle sobre análise e injeção de HTML. Uma vez definirHTML() for adotado, os sites poderão permitir a aplicação de tipos confiáveis com mais facilidade, muitas vezes sem exigir políticas personalizadas complexas. Uma política rigorosa pode permitir definirHTML() ao mesmo tempo que bloqueia outros métodos inseguros de inserção de HTML, ajudando a prevenir futuras regressões XSS.
A API Sanitizer permite uma substituição fácil de HTML interno tarefas com definirHTML() no código existente, introduzindo um novo padrão mais seguro para proteger os usuários contra ataques XSS na web. O Firefox 148 suporta a API Sanitizer, bem como tipos confiáveis, o que cria uma experiência na web mais segura. A adoção desses padrões permitirá que todos os desenvolvedores evitem o XSS sem a necessidade de uma equipe de segurança dedicada ou de mudanças significativas na implementação.
Créditos da imagem da ilustração acima: Site, de Desi Ratna; Pessoa, por Feito por Feito; Hacker por Andy Horvath.
Mais artigos de Tom Schuster…
Frederik Braun cria segurança para a web e para o Mozilla Firefox em Berlim. Como contribuidor de padrões, Frederik também está melhorando a plataforma web, trazendo segurança aos padrões com especificações como API Sanitizer e Integridade de Sub-recursos. Quando não está no trabalho, Frederik gosta de ler um bom romance ou de fazer longas caminhadas de bicicleta pela Europa.
Mais artigos de Frederik Braun…
Gerente, Engenharia de Segurança
Mais artigos de Christoph Kerschbaumer…

