Um momento
Aula 03
Cursos / Dicas de Desenvolvimento de Software em Áudio
O que é XSS (Dica de Software em Áudio)

Summary

# O que é XSS?

### Definição
XSS, ou Cross-Site Scripting, é uma vulnerabilidade em aplicativos web que permite a injeção de scripts maliciosos. É uma falha comum em sites que não fazem a devida sanitização das entradas dos usuários.

### Exemplos de XSS
1. **Comentários em um site**:
   - Um usuário pode inserir um comentário que contém tags HTML, como `<b>`, para formatar o texto. Se não houver proteção contra XSS, essa tag será renderizada no DOM e poderá ser utilizada para injetar scripts maliciosos.
   - Um exemplo mais sério seria um usuário inserir um código como `<script>` que, ao ser carregado por outros usuários, poderá executar comandos maliciosos no navegador deles.

2. **Uso de Query String**:
   - Parâmetros na URL (query strings) também podem ser alvos de XSS, permitindo a execução de scripts caso não sejam devidamente validados.

### Consequências do XSS
- Roubos de dados pessoais e valiosos de usuários que acessam a página vulnerável.
- Execução de um script malicioso no navegador dos usuários, coletando informações confidentials.

### Mitigações Contra XSS
- **Sanitização de entradas**: Todos os dados de entrada devem ser verificados e limpos para evitar a injeção de scripts.
- **Uso de Frameworks protegidos**: Muitos frameworks de desenvolvimento web já possuem mecanismos de proteção embutidos contra XSS.
- **Content Security Policy (CSP)**: Implementar políticas de segurança de conteúdo através de cabeçalhos HTTP para restringir a execução de scripts em páginas.
- **Evitando innerHTML**: Sempre que possível, utilize propriedades como `textContent` ao invés de `innerHTML` para manipular o DOM, previne a execução de scripts.

### Considerações Finais
XSS continua a ser uma preocupação significativa para desenvolvedores web. É crucial realizar testes e implementar medidas de proteção para prevenir vulnerabilidades. Para mais informações, recomenda-se pesquisar sobre XSS e suas possíveis soluções.

Video Transcript

O que é XSS? XSS é uma abreviação que no inglês significa cross-site scripting. Se usa X porque o X parece com a cruz e cross é cruzar. Então cross-site scripting, scripting de sites cruzados. XSS é um tipo de vulnerabilidade em aplicativos web. Era muito comum, ainda é como hoje, mas era muito comum, tempos atrás, tinha muitas dessas vulnerabilidades. Vou te dar um exemplo bem simples. Supou que você tem um site e tem uma lista de comentários e tem uma caixa para você enviar um comentário, caixa de texto. Bem, normalmente a pessoa quer digitar um texto e enviar um comentário, mas como você quer criar ou tomar vantagem de uma vulnerabilidade, nesse caso, XSS, você faria o seguinte. Bem, vamos pensar no que é bem. Vamos supor que a pessoa não tem intuição maligra. Antigamente, quando eu usava o site, quando eu era criança, eu queria colocar fonte negrita. Aí eu descobri que era só botar o sinal menor que b, maior que e botar o texto e fechar tag menor que barra b, maior que. E eu vi que alguns sites funcionavam. Então esse é um exemplo bem, bem simples. Tio que isso pode ser XSS. Nesse momento, você envia o comentário, na caixa de texto, você escreve a tag b, o texto e fecha tag de HTML e b. E envia esse comentário. Esse comentário é enviado ao servidor, que é armazenado no banco de dados. Quando você pega a lista de comentários, você recebe do servidor. E quando recebe do servidor, você injeta os comentários no DOM, document object model, nos elementos da parte. Então, um elemento é criado com o comentário. E no conteúdo do elemento tem aquele texto que eu digitei na caixa de comentários. Nesse caso, eu tinha digitado uma tag b, bold, para deixar o inegrito. Se não tiver nenhuma proteção contra XSS, nesse caso, a gente chama a limpeza da entrada, em inglês, sanitization, ele vai deixar, quando já está no HTML, ele vai deixar o texto que eu decidi. A minha mensagem, o meu comentário, vai aparecer em inegrito. Bem, esse exemplo foi bem simples, mas poderia ser algo pior. Talvez alguém poderia ter digitado, por exemplo, alguém poderia ter digitado uma tag de script menor que script maior que e fiz essa alguma coisa. Provavelmente coisa ruim, né? E fecha tag de script e manda isso para o como comentário. E as outras pessoas que abrem a página para ver os comentários, elas vão carregar o seu comentário. E o seu comentário, como tinha uma tag de script, ninguém nem vai perceber porque uma tag de script não aparece nada na página que é renderizada. A não ser que você tenha digitado também um comentário do lado do script só para poder falsificar o comentário. Não, como se diz, forjar, né? Para se dizer que só comentou alguma coisa, mas além do comentário tem também o script que seria executado também no navegador dessas outras pessoas que acessam a mesma página. Se fosse algo bem fácil, poderia ser, por exemplo, obter informações das pessoas. Por exemplo, se eu entro no site, eu sei que certas informações, quando eu logo no site, né, quando eu entro, certas informações são pessoais minhas. Pode até ter informação que é valiosa, né? Aí o que acontece? Como eu sei que essas informações estão na página? Eu poderia, com o intento malicioso, criar um script que iria rastrear ou obter todas as informações da estrutura do HTML e compilar uma mensagem e essa mensagem seria enviada a um servidor meu para eu poder obter esses dados de outras pessoas. Esse script seria rodado no navegador de cada pessoa que acesse, que acessa a página e vê os mesmos comentários. Como são pessoas diferentes, elas logam com outro perfil, com outra conta. Então, você teria acesso às informações dessas pessoas e essas informações seriam enviadas ao seu servidor para você coletar dados roubados, né? Então, essa é a vulnerabilidade de xss cross-site scripting, né? Tem também outras variações. Pode-se também tomar vantagem da query string que tem, por exemplo, quando você faz uma busca, normalmente aparece na URL, na barra de endereço do navegador, o sinal de interrogação, né? E com a par de propriedade e valor que tem o valor da busca ou algum parâmetro da busca, esse também pode ser um alvo de xss e você pode fazer alguma coisa lá que vai causar alguma coisa de ser rodada, se não houver nenhuma proteção. Tá bom? Então, essa é o xss. Hoje em dia, várias maneiras de se proteger é muito menos, mas hoje em dia a incidência desse problema é muito menor porque já houveram vários investimentos para poder na segurança de combater a vulnerabilidade de xss. Se você fazer site ou aplicativos, você sempre deve sanitizar, que a gente fala em inglês, sanitize as entradas. O que é isso? Cada mecanismo que você tem no seu aplicativo, que qualquer usuário pode entrar algum tipo de informação, você tem que verificar se ele não tentou colocar algo malicioso como um antag descript e assim por diante. Normalmente, vários frameworks de desenvolvimento web de servidores de back-end e tal, eles já tem embutido essa verificação, verificação e ele, se você tentar, se alguns usuários tentam digitar um antag e tal, ou pode ser, normalmente, a tag é removida ou algo assim acontece, então ele previne esse problema de até ser armazenado no banco de dados, nesse caso. Isso também, eu acho que ocorre no front-end frameworks como o videoatecas, react, view. Deve ter também esse mecanismo de proteção já embutido, eu acho. Até, por exemplo, se você escrever HTML puro, desculpa, JavaScript puro, você tem que tocar em qual tipo de funções você usar, por exemplo, você não vai usar inner HTML, normalmente, inner HTML pode ser um alvo de causar xs, de rodar o script. Em vez de usar inner HTML, quando você quer modificar o conteúdo de um elemento de HTML, você usa, por exemplo, text content. O text content, essa propriedade do elemento, só muda o texto e não permite que rode script ou que use tags. A navegadores hoje em dia também teve muito investimento nos navegadores e os próprios navegadores bloqueiam essas tentativas de xss, então já vem embutido também no navegador, embora que talvez o hacker pode também conseguir ultrapassar essa proteção no navegador, porque é só para usuário comum que tem a proteção de habilitar, então ela pode ser desabilitada do navegador. A outra coisa para remediar esse problema é content security policy, CSP. Contents security policy, você pode enviar do servidor um header de HTTP que determina a, como é que fala, policy, political, policy de segurança de conteúdo, CSP, content security policy. E você pode determinar que o servidor, quando manda a página de HTML, o navegador vê que tem o header de CSP e ele vai bloquear por exemplo a execução de script inline, se você tiver algum script rodando lá que foi adicionado por exemplo dentro do bar e você cria uma tag de script com um conteúdo dentro da tag sem ser externo que oficial que você já tinha determinado que iria rodar e tal e tal. Se você quiser saber mais sobre isso, pesquise CSP, content security policy. E assim por diante, então xss cross-site script vão na habilidade que afeta aplicativos web, sites web, os hackers estão a vontade de isso porque no navegador tem a execução de script de JavaScript, então devido a essa execução desses programas de código, você pode injetar um script malucioso que acidentalmente pode se tornar parte da estrutura da página presente, né? A injação de, você coloca um, por exemplo, um tag de script com um script malucioso e esse script roda não só no seu navegador, mas de outras pessoas, né? Tem também outro exemplo da página de support, por exemplo. Acho que é parecido com os comentários, você tem, sabe que você vai nos sites, às vezes tem uma chat, uma salinha de bate-papla, tem um ícone em um dos lados da tela que você clica aí, ele vai para o suporte, né? Assistência ao consumidor e tal, você pode falar com alguém e mandar mensagem, você também tem um risco de você colocar xss, tomar vantagem de xss aí. Seria o seguinte, do seu perfil, não tem nenhuma informação, mas do perfil da pessoa que oferece o suporte, né? O representante de suporte, ele tem acesso no sistema dele, normalmente, há várias informações de vários clientes, então quando ele vai ajudar o pessoal, ele tem uma lista de pessoal para ajudar e quando ele está acessando o site do lado dele, tem várias informações confidenciais que a pessoa do outro lado que ele está oferecendo ajuda, não tem acesso, então você poderia tomar vantagem de xss se você escrevesse o script malecioso do lado da sua mensagem, mandar essa mensagem e se esse aplicativo não tivesse proteção contra xss, né? Ele deixava, mandava e armazenava no banco de dados essa mensagem, apareceria lá para o suporte e esse cara do suporte veria a mensagem, mas não veria o script que está executando, nem dava, nem ele nem iria se tocar que o script estaria sendo executado porque se você colocar a tag de script lá na caixa de texto, não aparece na página, só o que aparece ao texto, não as tags, script, então poderia rodar o script lá no background enquanto o cara estava oferecendo suporte e esse script iria rastrear toda a estrutura da HTML, DOM que ele tem e procurar e achar informação, né? Nesses casos você teria que saber onde é que está as informações ou você poderia já mandar logo fazer um dump, né? De tudo e mandar para o seu servidor malecidoso e lá você analisaria aquelas informações que foram enviadas para ver se tem alguma informação confidável, que eu tenho certeza que tem, né? Porque é o navegador dos representantes de suporte, ele tem acesso à informação que você não tem acesso. Tá bom pessoal, então se você quiser se aprofundar mais aí pesquisa em xss, uma vulnerabilidade de sites e aplicativos web. Era muito como antigamente, hoje ainda se faz se você não não se toca, né? Mas saiba dessa vulnerabilidade e sempre tome cuidado quando você tomar entrada de usuários e não deixe eles sempre teste, não deixe eles enviarem tags, né? Outra coisa que você pode fazer é se eles enviaram os tags e você não tiver protegido o seu banco de dados, você pode também rastrear, fazer uma query no seu banco de dados e procurar pelo padrão, né? Faz um regx da tag das tags e html e vê se alguém não digitou ou armazenou a tag e você pode limpar, não precisa de uma querida dessa maneira. Então por essa é só, até a próxima, espero que tenham gostado dessa dica e até mais. Tchau.
Nenhum comentário ainda (loading...)
Nenhum comentário ainda (loading...)
Gostou da aula? 😆👍
Apoie nosso trabalho com uma doação: