Se chegou a esta página diretamente a partir de um Pull Request do Aikido Autofix e apenas quer aprender como terminar o PR, passe para 'Como implementar'.
O ecossistema JavaScript tem um problema que se chama poluição de protótipos. Para uma empresa SaaS que constrói com JavaScript/npm, normalmente até 20-30% de todas as vulnerabilidades conhecidas (CVE) detectadas nas dependências são causadas pela poluição de protótipos. Normalmente não são fáceis de explorar, mas em casos graves, podem levar a falhas de execução remota de código. Isso significa que são difíceis de ignorar completamente.
Duas formas de prevenir a poluição por protótipos
Há um suporte experimental no Node.js para congelar o protótipo por padrão sob uma flag chamada --frozen-intrinsics. Ativar esse sinalizador derrota todos os ataques de poluição de protótipo. No entanto, não podemos recomendá-lo ainda porque é experimental e também não funcionará em bases de código de front-end. Isso o impediria de construir a mesma proteção em seu frontend e backend.
Uma alternativa é o nopp (No Prototype Pollution), uma biblioteca de 14 linhas que congela o protótipo (e alguns outros pontos de entrada).
Como implementar
1. Importar a biblioteca
Depois de ter instalado o nopp, tudo o que tem de fazer é ir ao script que inicia a sua aplicação. Lá você simplesmente requer a biblioteca, depois de ter requerido todas as suas outras bibliotecas. Exemplo de commit abaixo:

2. Controlo de segurança a nível da aplicação para as bibliotecas que dependem da manipulação do protótipo
A razão pela qual estamos a congelar o protótipo depois de incluir outras bibliotecas é que algumas das suas outras bibliotecas podem depender da alteração do protótipo para funcionar! Mesmo depois de ter certeza de congelar o protótipo DEPOIS de incluir outras bibliotecas, ainda é possível que você precise de alguma refatoração antes que seu aplicativo funcione novamente!
Por exemplo, o próprio aws-sdk da Amazon para Node.js faz alterações no protótipo durante a construção de objectos como "new AWS.S3(...)". Nesses casos, pode ser necessário fazer uma refatoração como mostrado abaixo, garantindo que o objeto seja criado quando o processo do Node.js for iniciado e não durante uma fase posterior.

Certificar-se de que sua aplicação ainda funciona após essa mudança pode ser um investimento de tempo maior para repositórios maiores que têm baixa cobertura de teste. Para repositórios menores, valerá a pena nunca mais ter que lidar com a poluição de protótipos. Para repositórios maiores, isso pode ser mais complexo, mas o investimento em engenharia provavelmente ainda terá um ROI positivo a longo prazo.