‫Instrutor: Nesta aula, vamos implementar a limitação de
‫taxa para evitar que o
‫mesmo IP faça muitas solicitações à nossa API
‫e isso nos ajudará a prevenir ataques
‫como negação de serviço ou ataques de força bruta.
‫Portanto, esse limitador de taxa será implementado
‫como uma função de middleware global.
‫Então, basicamente, o que o limitador de taxa
‫fará, é contar o número de solicitações provenientes de um
‫IP e então, quando
‫houver muitas solicitações, bloquear essas solicitações, ok?
‫E faz sentido implementar isso em um middleware
‫global, então, fazemos isso no aplicativo. js.
‫Então, não usamos este há muito tempo, e o
‫limitador de taxa que
‫vamos usar é um pacote npm chamado Express Rate Limit.
‫Então vamos instalar isso.
‫npm i limite de taxa expressa, certo.
‫E então, aqui no topo de nosso aplicativo,
‫vamos chamá-lo de rateLimit e, em seguida, exigir o expresso e,
‫na verdade, ele já está aqui. Portanto, o código do VS obtém
‫esse nome de nosso pacote. arquivo json.
‫Ok, e este nome que
‫dei aqui geralmente vem da documentação.
‫Então, se eles fizerem assim na
‫documentação, bem, esse é o caminho que eu sigo também.
‫Ok, agora vamos usar este middleware
‫bem aqui no topo de nossos middlewares globais, vamos
‫escrever isso aqui, global.
‫E começamos criando um limitador.
‫Limitador, e fazemos isso chamando
‫a função rateLimit que acabamos de definir lá.
‫Então rateLimit é uma função
‫que recebe um objeto de opções, ok?
‫E aqui, podemos definir
‫basicamente quantas solicitações por IP vamos permitir em
‫um determinado período de tempo.
‫Podemos especificar a propriedade max, que irei
‫definir como 100, e também a janela, então
‫a janela de tempo, certo?
‫Então, o que eu quero permitir aqui
‫é basicamente 100 solicitações por hora.
‫E isso aqui na verdade é chamado de janela milissegundos.
‫Ok, então queremos uma hora de 60
‫minutos, vezes 60 para segundos, vezes 1.000 para milissegundos.
‫Tudo bem, novamente, o que isso
‫fará é permitir 100 solicitações do mesmo IP em uma hora.
‫Ok, e se esse limite for
‫ultrapassado por um determinado IP, eles receberão uma mensagem de erro.
‫E aqui agora podemos especificar essa mensagem.
‫Muitos pedidos deste IP, por favor, tente
‫novamente em uma hora, certo, então precisamos encontrar um
‫equilíbrio que funcione
‫melhor para nossa aplicação.
‫Por exemplo, se você está construindo
‫uma API, que realmente precisa de muitas solicitações para um IP, então,
‫é claro, esse número aqui deve ser maior.
‫Portanto, não siga cegamente o que acabei de
‫colocar aqui, mas adapte realmente ao seu próprio
‫aplicativo para não inutilizá-lo
‫por causa desse limitador, certo?
‫Enfim, esse limitador que acabamos de criar é
‫basicamente uma função de middleware, certo?
‫Portanto, rateLimit é uma função que irá, com
‫base em nossos objetos, criar uma função de middleware, que
‫agora podemos usar usando o app. use exatamente como fizemos antes.
‫E podemos fazer isso simplesmente assim.
‫Mas o que realmente queremos é
‫basicamente limitar o acesso à nossa rota de API.
‫Portanto, podemos especificar isso aqui,
‫lembre-se de que podemos fazer isso com middleware.
‫E então, basicamente queremos aplicar este limitador apenas
‫a uma API de barra, ok?
‫E isso afetará todas as
‫rotas que basicamente começam com isso, seu aplicativo,
‫então a API de barra, ótimo.
‫Então, vamos voltar à nossa guia principal aqui.
‫Salve e agora vamos tentar fazer isso aqui com o
‫mais simples, então pegue todos
‫os tours, aqui está o nosso resultado e agora o que
‫eu quero mostrar a vocês são esses cabeçalhos aqui.
‫Nosso limitador de taxa cria
‫esses dois cabeçalhos, então o RateLimit-Limit e o RateLimit-Remaining, certo?
‫Então começamos com 100 exatamente como
‫definimos, e agora temos
‫99 restantes, porque já fizemos uma solicitação, certo?
‫Então, o que acontece se fizermos um outro?
‫Vamos fazer com Get Tour, por exemplo, e
‫não há tour com esse
‫ID, mas isso não importa, o
‫que importa aqui é que o restante agora caiu para 98.
‫E se tentarmos novamente,
‫você verá que caiu ainda mais para 97, certo?
‫E aqui embaixo, também temos o reset.
‫Então, basicamente, o carimbo de data / hora em que foi redefinido, certo?
‫Para aquela janela de uma hora que especificamos antes.
‫Ok, agora se entre isso nosso aplicativo for reiniciado,
‫para fazer isso irei simplesmente salvar.
‫Vamos ver o que acontece então, ok, estou
‫enviando novamente, e agora estamos
‫de volta, basicamente começando do início.
‫Ok, então nosso aplicativo não pode travar durante esse
‫tempo, porque do contrário,
‫isso basicamente redefinirá o limite também, certo?
‫Agora, vamos tentar ver a mensagem de
‫erro e, portanto, reduzirei esse máximo para apenas três, certo?
‫E salve aqui, envie esta solicitação, e em nossos cabeçalhos
‫vemos que
‫temos apenas dois restantes, vamos tentar outro e
‫agora zero restante, então este provavelmente foi o
‫nosso último, vamos ver o corpo,
‫desta vez, nós ainda temos
‫dados, mas se tentarmos novamente, teremos um erro.
‫Roo muitos pedidos deste IP.
‫Em seguida, ele definirá
‫automaticamente o código de status para 429, o que significa muitas solicitações.
‫Ok, e novamente, isso nos ajudará a tentar
‫prevenir a negação de serviço e também ataques de força bruta
‫onde um invasor tenta adivinhar
‫a senha de algum usuário, basicamente
‫usando como o nome diz, força bruta.
‫Ok, isso é uma limitação da API,
‫bastante simples de implementar com este
‫pacote Express Rate Limit.