添加 HSTS 标头

塞缪尔·达雷

我需要向这个文件添加一个 HSTS 头,但我不确定如何做。

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 });
      }
    }
  }

我将不胜感激任何方向

蒂姆·佩里

在响应中,您可以调用res.setHeader(headerName, headerValue)设置任何标头,包括 HSTS 标头。通常,您需要执行以下操作:

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

这使 HSTS 能够运行 1 小时 - 这是第一次测试的一个很好的值,但是一旦您确认一切正常,您可能应该将其增加到 31536000(1 年)之类的值。

你需要把它放在你的res.status()...之前的某个地方来设置这个标题。

这将为整个站点和其他子域启用 HSTS,但仅当客户端请求此特定端点时才启用。在大多数情况下,假设您有许多其他端点,您希望在所有响应中发送 HSTS 响应标头为此,您可以使用 express 中间件来添加这些标头。您可以自己编写,也可以使用Helmet(例如app.use(helmet.hsts())),它可以在全球范围内轻松地为您执行此操作以及许多其他良好的安全实践。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章