Aula 03
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: