Como evitar scripts entre sites em Node.js
Os invasores podem roubar dados confidenciais do seu site. Aprenda como proteger seu site contra ataques XSS.
Cross-site scripting (XSS) é um tipo de exploração de segurança que permite que invasores injetem scripts maliciosos em sites usando código de cliente. 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, ocupava o segundo lugar na lista de enumeração de fraquezas comuns das 25 fraquezas mais perigosas. Isso significa que se você estiver criando sites, você deve saber sobre scripts entre sites e como evitá-los.
Como funciona o script entre sites?
Antes de entender como funciona o cross-site scripting, é importante saber o que significa a política de mesma origem (SOP). SOP é uma política de mecanismo de segurança que restringe a leitura ou gravação de um site (uma origem) em outro site (uma origem diferente). Impede que sites maliciosos enviem códigos maliciosos para sites confiáveis.
Os ataques de script entre sites tentam contornar esta 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 Node
A seguir estão algumas etapas que você pode seguir para evitar scripts entre sites no Node.
Sanitizar entrada
Os invasores precisam ser capazes de 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 informações que seu aplicativo recebe de seus usuários. Isso é crucial porque detecta dados falsos antes que o servidor os execute. Você pode fazer isso manualmente ou usar uma ferramenta como o validador, 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.
import validator from "validator";
let userInput = `Jane <script onload="alert('XSS hack');"></script>`;
let sanitizedInput = validator.escape(userInput);
Se você executasse o código acima, a saída higienizada seria esta.
Jane <script onload="alert('XSS hack');"></script>
Restringir a 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 política de cookies somente HTTP
Os cookies armazenam dados em um cache local e os enviam de volta ao servidor via HTTP. Mas os invasores também podem usar JavaScript para acessá-los por meio do navegador, tornando-os 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, ele não conseguirá acessar o cookie.
Aqui está um exemplo de como você pode implementar a política de cookies somente HTTP em Node.js usando Express:
app.use(express.session({
secret: "secret",
cookie: {
httpOnly: true,
secure: true
}
}))
Se um invasor tentasse acessar o cookie com a tag httpOnly definida como verdadeira conforme mostrado acima, ele receberia 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. Nesta postagem, você aprendeu sobre ataques de script entre sites e como evitá-los no Node. Como os invasores aproveitam as vulnerabilidades do seu aplicativo para injetar código malicioso no servidor, certifique-se sempre de limpar a entrada do usuário. Ao fazer isso, você remove o código malicioso antes que seu aplicativo o armazene ou execute.