Se você está apenas começando sua jornada de desenvolvimento web ou Node.js, talvez não saiba o quanto é importante proteger seu aplicativo.

O Express.js fornece uma solução de alto desempenho para criar aplicativos da Web de back-end, mas deixa a desejar em termos de segurança. Ao criar um aplicativo da Web, você precisa de medidas de segurança adequadas para proteger os dados de seus usuários.

Felizmente, existem métodos que você pode adotar para aumentar a segurança de seus aplicativos Express.js. Todas essas dicas ajudarão a reforçar a segurança de seus aplicativos usando diferentes abordagens.

Configurar um aplicativo Express.js

Comece configurando uma demonstração servidor web Express.js usando npm, o gerenciador de pacotes de nós. Crie uma pasta de projeto localmente e altere o diretório para ela em seu terminal.

mkdir express-project
cd express-project

A seguir, crie um pacote.json arquivo no diretório raiz.

npm init -y

Vá em frente e instale o Express.js.

npm instala expresso

Por fim, crie um

server.js arquivo no diretório raiz da pasta do seu projeto e adicione o seguinte código para configurar um servidor web básico.

const expresso = exigir("expressar")
const aplicativo = expresso()
const PORT = processo.env. PORTO || 5000

app.get("/", (req, res) => {
res.json("Olá Mundo!")
})

app.listen (PORT, () => {
console.registro(`Iniciando servidor em http://localhost:${PORTA}`)
})

Inicie o servidor com este comando:

node server.js

Agora você está pronto para explorar algumas das medidas que pode usar para proteger seu aplicativo Express.js.

1. Protegendo aplicativos Express.js usando o Helmet

Capacete é um middleware Node.js que ajuda a proteger aplicativos do lado do servidor definindo vários cabeçalhos de segurança HTTP. Esses cabeçalhos fornecem mecanismos de defesa essenciais contra vulnerabilidades comuns de segurança de back-end, como cross-site scripting (XSS), cross-site request forgery (CSRF) e muito mais.

O Express.js não configura cabeçalhos de segurança HTTP por padrão, deixando uma possível falha de segurança que expõe cabeçalhos potencialmente confidenciais. Usando essas informações, agentes mal-intencionados podem obter acesso não autorizado ou interromper seu aplicativo.

O Helmet atua como um escudo vital, garantindo que as respostas HTTP do aplicativo adotem as medidas de segurança necessárias, reduzindo significativamente a potencial superfície de ataque.

Explorando a segurança de aplicativos Express.js sem capacete

Com o servidor em execução, examine os cabeçalhos do aplicativo. Vá em frente e fazer solicitações HTTP para a API usando o Postman ou qualquer outro cliente que mostre cabeçalhos de resposta. A maioria dos navegadores inclui um conjunto de ferramentas de desenvolvedor que permitem que você faça isso.

Ao enviar solicitações para o endpoint inicial, você deve observar resultados semelhantes no Cabeçalhos seção da resposta dentro do Postman.

Observe o X-Powered-By cabeçalho. Normalmente, as tecnologias de back-end usam esse cabeçalho para indicar a estrutura ou outro software que alimenta o aplicativo da web. Você geralmente deve remover o X-Powered-By cabeçalho em um ambiente de produção.

Ao fazer isso, você impedirá que invasores em potencial obtenham informações valiosas que possam usar para explorar vulnerabilidades conhecidas associadas à sua pilha de tecnologia.

Teste a configuração de segurança do servidor Express.js

Para avaliar o status de segurança de seus aplicativos, usaremos o Cabeçalhos de segurança ferramenta on-line. Este aplicativo foi projetado especificamente para avaliar a configuração de segurança de cabeçalhos HTTP para aplicativos do lado do cliente, bem como do lado do servidor.

Primeiro, você precisa tornar seu servidor Express.js local acessível pela Internet. Há duas abordagens possíveis para conseguir isso: implantar seu aplicativo Express.js em um servidor em nuvem ou utilizar o ngrok.

Para usá-lo, baixar o ngrok zip, extraia o executável e inicie o aplicativo. Em seguida, execute o seguinte comando para hospedar seu servidor Express.js local com ngrok.

ngrok http 5000

O ngrok produzirá algumas informações breves que se parecem com isto:

Copie o fornecido URL de encaminhamento e cole no Cabeçalhos de segurança' caixa de entrada e clique no Varredura botão.

Depois que a avaliação de segurança for concluída, você deverá receber um relatório semelhante.

Com base no relatório, é evidente que o servidor Express.js recebeu uma má F nota. Essa nota baixa é resultado da ausência de cabeçalhos de segurança HTTP essenciais na configuração do servidor — sua ausência deixa o servidor vulnerável a possíveis riscos de segurança.

Integre o Helmet no aplicativo Express.js

Agora, vá em frente e integre o Helmet em seu aplicativo Express.js. Execute o comando abaixo para instalar a dependência.

npm instalar capacete

Atualize seu arquivo server.js e importe Helmet.

const capacete = exigir("capacete")

Agora, adicione Helmet ao seu aplicativo Express.js.

app.use (capacete())

Por fim, ative o servidor de desenvolvimento, copie o link de encaminhamento de ngrok's terminal e cole-o no Cabeçalhos de Segurança campo de entrada para verificar novamente o servidor local. Depois que a nova verificação for concluída, você verá resultados semelhantes a estes:

Depois de integrar o Helmet, o Express.js inclui vários cabeçalhos de segurança essenciais na resposta HTTP. Essa melhoria substancial fez com que o aplicativo Express.js mudasse para um A nota.

Embora o Helmet não seja uma solução infalível, ele aumenta significativamente a segurança geral do seu aplicativo Express.js.

2. Protegendo aplicativos Express.js usando Joi, uma biblioteca de validação de entrada

joi é uma biblioteca de validação de entrada que ajuda a proteger os aplicativos Express.js, fornecendo uma maneira conveniente de validar e limpar a entrada do usuário. Ao definir esquemas de validação usando Joi, você pode especificar a estrutura esperada, tipos de dados e restrições para dados recebidos.

Joi valida a entrada em relação ao esquema definido, garantindo que atenda aos critérios especificados. Isso ajuda a evitar vulnerabilidades de segurança comuns, como injeção de dados, script entre sites (XSS) e outros ataques de manipulação de dados.

Siga estas etapas para integrar o Joi ao seu aplicativo.

  1. Instale Joi.
    npm instalar joi
  2. Importe Joi em seu arquivo server.js.
    const Joi = exigir('joi');
  3. Crie um esquema de validação de dados Joi que defina a estrutura esperada e quaisquer restrições para os dados de entrada.
    const schema = Joi.object({
    e-mail: Joi.string().email().required(),
    senha: Joi.string().min(5).max(16).obrigatório()
    });
  4. Valide todos os dados recebidos usando o esquema definido.
    const { erro, valor } = schema.validate (req.body);

    se (erro) {
    // Tratamento do erro de validação
    // Por exemplo, retorna uma resposta de erro
    retornar res.status(400).json({ erro: detalhes do erro[0].mensagem });
    }

Ao implementar essas etapas, você pode aproveitar os recursos de validação de entrada do Joi para proteger seus aplicativos Express.js. Isso garantirá que os dados recebidos atendam às restrições definidas, evitando possíveis ameaças à segurança de manipulação de dados.

3. Protegendo aplicativos Express.js usando o mecanismo CORS

Cross-Origin Resource Sharing (CORS) é um mecanismo que os servidores da Web usam para gerenciar quais origens - clientes ou outros aplicativos do lado do servidor - podem acessar seus recursos protegidos. Esse mecanismo ajuda a proteger contra solicitações de origem cruzada não autorizadas, evitando problemas como ataques de script entre sites (XSS).

Para proteger aplicativos Express.js usando o CORS, siga estas etapas:

  1. Instale o pacote CORS.
    npm install cors
  2. Exija e use o middleware CORS no arquivo server.js.
    const cors = exigir('cors');
    app.use (cors());

Ao integrar o middleware CORS em seu aplicativo Express.js, você habilita o compartilhamento de recursos entre origens. Isso garante a redução de possíveis riscos de segurança relacionados a solicitações entre origens.

Protegendo aplicativos do lado do servidor com facilidade

Você pode usar uma ou mais dessas medidas essenciais para aumentar a segurança de seus aplicativos Express.js.

Embora existam muitas medidas e abordagens disponíveis para proteger seus aplicativos do lado do servidor, a principal conclusão é que você deve priorizar a segurança durante todo o ciclo de vida do desenvolvimento. Essa é uma tarefa que começa na fase de design e deve continuar até a implantação.