Necesito agregar un encabezado HSTS a este archivo, pero no estoy seguro de cómo hacerlo.

import { injectable, inject } from 'tsyringe';
import { NextFunction, Request, Response } from 'express';

import * as Types from '../../types';

@injectable()
class EncryptionController {

  constructor(@inject('EncryptionService') private service: Types.EncryptionService) { }

  public encrypt = async (req: Request, res: Response<Types.EncryptResponsePayload | Types.ServiceError>, next: NextFunction) => {
    try {
      
      const { publicKeys, payload } = req.body as Types.EncryptRequest;
      const response = await this.service.encrypt(payload, publicKeys);
      
      res.status(200).json(response);
    } catch (error) {
      if (error.message === 'not found' || error.message === 'Secret not found') {
        res.status(404).json({ message: error.message });
      } else {
        res.status(400).json({ message: error.message });
      }
    }
  }

Agradecería cualquier dirección sobre esto

1
Samuel Dare 4 mar. 2021 a las 13:43

1 respuesta

La mejor respuesta

En la respuesta, puede llamar a res.setHeader(headerName, headerValue) para configurar cualquier encabezado, incluidos los encabezados HSTS. Por lo general, querrá hacer algo como:

res.setHeader('Strict-Transport-Security', 'max-age=3600; includeSubDomains');

Eso habilita HSTS durante 1 hora; este es un buen valor para una primera prueba, pero probablemente debería aumentarlo a algo como 31536000 (1 año) una vez que haya confirmado que todo funciona correctamente.

Debe poner eso en algún lugar antes de sus líneas res.status()... para establecer este encabezado.

Esto habilita HSTS para todo el sitio y otros subdominios, pero solo una vez que el cliente solicita este punto final específico. En la mayoría de los casos, asumiendo que tiene muchos otros puntos finales, desea enviar encabezados de respuesta HSTS en todas respuestas. Para hacerlo, puede usar el middleware express para agregar estos encabezados. Puede escribirlo usted mismo o puede usar Helmet (por ejemplo, app.use(helmet.hsts())) que puede hacer esto y muchas otras buenas prácticas de seguridad para usted de forma global y sencilla.

1
Tim Perry 4 mar. 2021 a las 10:51