Cross-site scripting (XSS) é um tipo de exploração de segurança que permite aos invasores injetar scripts maliciosos em sites usando o código do cliente. Ele representa uma ameaça significativa, pois os invasores podem usá-lo para se passar por usuários, obter acesso a dados confidenciais ou até mesmo alterar o conteúdo da página do site.
É tão perigoso que, em 2021, era o número dois na lista de enumeração de fraquezas comuns das 25 fraquezas mais perigosas. Isso significa que, se você estiver criando sites, deve saber sobre scripts entre sites e como evitá-los.
Como funciona o script entre sites?
Antes de entender como o script entre sites funciona, é importante saber o que significa a política de mesma origem (SOP). SOP é uma política de mecanismo de segurança que restringe um site (uma origem) de ler ou gravar em outro site (uma origem diferente). Ele impede que sites maliciosos enviem código malicioso para sites confiáveis.
Os ataques de script entre sites tentam contornar essa política explorando a incapacidade do navegador de distinguir entre HTML legítimo e código malicioso. Por exemplo, um invasor pode injetar código JavaScript no site de destino. Suponha que o navegador execute o código e o invasor obtenha acesso a tokens de sessão, cookies e outros dados confidenciais.
Existem três tipos de scripts entre sites que os hackers usam para quebrar sites: refletido, armazenado e DOM XSS.
Como evitar scripts entre sites no nó
A seguir estão algumas etapas que você pode seguir para evitar scripts entre sites no Node.
Higienizar a entrada
Os invasores precisam enviar dados para seu aplicativo da Web e exibi-los a um usuário para realizar um ataque XSS. Portanto, a primeira medida preventiva que você deve tomar é higienizar todas as entradas que seu aplicativo recebe de seus usuários. Isso é crucial porque detecta os dados falsos antes que o servidor os execute. Você pode fazer isso manualmente ou usar uma ferramenta como validador o que torna o processo mais rápido.
Por exemplo, você pode usar o validador para escapar de tags HTML na entrada do usuário, como abaixo.
importar validador a partir de "validador";
deixe userInput = `Jane <script onload="alerta('XSS hack');"></script>`;
deixar higienizadoInput = validator.escape (userInput);
Se você executasse o código acima, a saída higienizada seria esta.
Jane < script onload=" alerta('XSS hack');"></ roteiro>
Restringir entrada do usuário
Restrinja o tipo de entrada que um usuário pode enviar em seu formulário por meio de validação. Por exemplo, se você tiver um campo de entrada para um e-mail, permita apenas a entrada com o formato de e-mail. Dessa forma, você minimiza as chances de invasores enviarem dados incorretos. Você também pode usar o pacote validador para isso.
Implementar a política de cookies somente HTTP
Os cookies armazenam dados em um cache local e enviá-lo de volta ao servidor via HTTP. Mas os invasores também podem usar JavaScript para acessá-los pelo navegador, então são alvos fáceis.
O cookie somente HTTP é uma política que impede que scripts do lado do cliente acessem dados de cookies. Isso significa que, mesmo que seu aplicativo contenha uma vulnerabilidade e um invasor a explore, eles não poderão acessar o cookie.
Aqui está um exemplo de como você pode implementar a política de cookies somente HTTP no Node.js usando o Express:
aplicativo.usar(expressar.sessão({
segredo: "segredo",
bolacha: {
httpSomente: verdadeiro,
seguro: verdadeiro
}
}))
Se um invasor tentar acessar o cookie com o httpSomente definido como true como mostrado acima, eles receberiam uma string vazia.
Cross-Site Scripting é um alvo fácil para hackers
Embora garantir a segurança do seu aplicativo seja crucial, implementá-lo pode ser complicado. Neste post, você aprendeu sobre ataques de script entre sites e como você pode evitá-los no Node. Como os invasores aproveitam as vulnerabilidades em seu aplicativo para injetar código malicioso em seu servidor, sempre certifique-se de higienizar a entrada do usuário. Ao fazer isso, você remove o código malicioso antes que seu aplicativo o armazene ou execute.