‫-: Nesta palestra, vamos
‫usar mais dois pacotes para melhorar a segurança da nossa aplicação, e
‫desta vez para realizar a higienização dos dados.
‫Portanto, a higienização de dados significa
‫basicamente limpar todos os
‫dados que entram no aplicativo de códigos maliciosos.
‫Então, código que está tentando atacar nosso aplicativo.
‫Neste caso, estamos tentando nos defender de dois ataques.
‫Então, vamos escrever isso, e vamos fazer
‫isso, digamos, bem aqui após o analisador de corpo.
‫Este middleware aqui lê os dados
‫na solicitação. corpo, e só
‫depois disso podemos realmente limpar esses dados, certo?
‫Este é um lugar perfeito para fazer a higienização de dados.
‫Portanto, faremos sanitização de dados contra injeção de
‫consulta NoSQL e também sanitização de dados contra
‫ataques de script entre sites.
‫E agora, antes de
‫qualquer coisa, deixe-me mostrar porque é tão
‫importante se defender contra esse tipo de ataque.
‫Agora simularemos uma injeção de consulta NoSQL e
‫espero que você fique tão chocado quanto eu quando
‫descobri como isso pode ser poderoso.
‫Vamos agora ao Postman aqui e tentar
‫fazer o login como alguém,
‫mesmo sem saber o endereço de e-mail.
‫Tudo bem, então basicamente, simplesmente dando uma senha, digamos esta
‫aqui, poderemos logar, mas mesmo sem saber
‫o endereço de e-mail.
‫Novamente, faremos isso
‫simulando uma injeção de consulta NoSQL, e a
‫maneira mais fácil de fazer isso é assim.
‫Em vez de especificar
‫um e-mail real, especificamos esta consulta, basicamente.
‫Usamos o operador MongoDB maior
‫que e definimos igual a nada, certo?
‫E agora, o que acontece?
‫Na verdade, agora estamos logados como administrador.
‫Então, você vê que até temos nosso token de acesso.
‫Sim, agora estamos realmente logados, e isso
‫me surpreende completamente, ok?
‫Novamente, sem saber o endereço
‫de e-mail, apenas a senha, conseguimos fazer o login.
‫E acredite em mim, não é realmente
‫difícil encontrar um monte de senhas realmente populares que são
‫usadas em todos os aplicativos.
‫Portanto, é contra esse tipo de ataque que precisamos nos proteger.
‫Isso funciona basicamente porque sempre será verdade, então isso é realmente
‫- você também vê isso no Compass.
‫Então, estou copiando ou, na verdade, vamos copiar tudo isso.
‫Em seguida, tente filtrar exatamente por esta mesma coisa.
‫Agora estamos faltando apenas as
‫chaves, mas agora temos uma consulta válida.
‫Vamos clicar em Encontrar e, de fato, isso retorna todos os usuários.
‫Então, basicamente, todos os usuários correspondem a esta consulta.
‫Novamente, é porque isso aqui é sempre verdade.
‫Isso selecionará todos os nomes de usuário.
‫Aquela injeção de consulta maliciosa aqui
‫nos permitiu fazer login apenas sabendo essa senha, certo?
‫Então, para nos protegermos disso, vamos
‫instalar outro middleware,
‫e este se chama express-mongo-sanitize, e já que estamos
‫aqui, vamos também instalar o outro
‫que vamos precisar, mas depois
‫neste vídeo, que é chamado simplesmente de XSS.
‫Na verdade, isso não estava correto; é chamado de XSS_clean.
‫Precisamos ir em frente e desinstalar o outro.
‫NPM desinstalar XSS.
‫Vamos dar uma olhada em nosso pacote. json, e de fato se foi.
‫Novamente, XSS_clean é o que desejamos usar.
‫De qualquer forma, primeiro, vamos
‫falar sobre a injeção de consulta NoSQL novamente.
‫Tudo o que vamos usar é
‫- e, claro, precisamos
‫primeiro exigi-lo, então const mongoSanitize equals requer express-mongo-sanitize.
‫Novamente, o VS Code aqui me ajuda e, como estamos aqui,
‫também vamos solicitar o próximo.
‫A variável que estou exigindo é
‫chamada XSS e, em seguida, o nome do módulo é XSS_clean.
‫Então, vamos usar este mongoSanitize aqui - bem aqui.
‫MongoSanitize é uma função que chamaremos, que
‫retornará uma função de middleware,
‫que podemos usar.
‫Isso é o suficiente para nos prevenir
‫contra o tipo de ataque que acabamos de ver.
‫Portanto, o que esse middleware faz
‫é examinar o corpo da solicitação, a string de consulta da solicitação
‫e também a Solicitação. Params, e
‫basicamente filtrará todos
‫os cifrões e pontos, porque
‫é assim que os operadores MongoDB são escritos.
‫Ao remover isso, bem, esses operadores
‫não funcionarão mais.
‫Então, vamos tentar de novo.
‫Novamente, ele removerá todos esses cifrões.
‫Se eu fizer isso agora, obteremos
‫esse erro e não
‫podemos mais usar esse truque aqui,
‫esse ataque de injeção de consulta, para fazer login.
‫Então, isso corrige o primeiro problema, mas
‫agora vamos usar aquele
‫outro middleware que também acabamos de solicitar.
‫Então, app. usar e XSS, certo?
‫Isso limpará qualquer entrada do
‫usuário de código HTML malicioso, basicamente.
‫Imagine que um invasor tente inserir
‫algum código HTML malicioso com
‫algum código JavaScript anexado a ele.
‫Se isso fosse injetado mais tarde em nosso site
‫HTML, poderia realmente causar algum dano.
‫Usando esse middleware, evitamos
‫isso basicamente convertendo todos esses símbolos HTML.
‫Como eu disse antes, a validação do Mongoose
‫em si já é uma proteção muito boa contra XSS, porque ela
‫realmente não permitirá que qualquer coisa
‫maluca entre em nosso banco de dados, desde
‫que a usemos corretamente.
‫Sempre que puder, apenas adicione alguma validação aos
‫seus esquemas Mongoose, e isso deve
‫protegê-lo principalmente de scripts entre sites, pelo menos no lado do servidor.
‫Vamos testar rapidamente esse middleware aqui também.
‫O que vou fazer é simplesmente criar um novo
‫usuário e vamos chamá-lo de "testador" aqui ou algo parecido.
‫A senha está certa, e aqui,
‫no nome, vamos adicionar algum código HTML.
‫Então, div com o id de código ruim.
‫Tudo bem, vamos tentar isso agora.
‫Você vê que o módulo XSS
‫que usamos realmente converteu esses
‫símbolos HTML aqui, principalmente este, nesta entidade HTML aqui.
‫Vamos deletar esse cara rapidamente.
‫Não precisamos dele de forma alguma. (Risos) Essa é
‫a nossa proteção rápida e fácil contra alguns
‫desses ataques usando sanitização de dados.
‫Lembre-se também de que a biblioteca de funções do
‫validador que usamos antes também
‫contém algumas funções de limpeza interessantes.
‫Também poderíamos construir manualmente algum middleware usando isso, mas,
‫novamente, isso não é
‫realmente necessário, porque o Mongoose já impõe um esquema estrito.
‫Então, se encontrar algo estranho,
‫ele gerará um erro e, sim, essa
‫já é uma proteção muito boa.
‫Então, estamos quase terminando a parte de segurança.
‫Tudo o que precisamos fazer
‫no próximo vídeo é evitar a poluição dos parâmetros.