【最佳实践】如何修改 Express 服务响应头?

这篇具有很好参考价值的文章主要介绍了【最佳实践】如何修改 Express 服务响应头?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

📘 欢迎关注博主的掘金:暮星的主页



背景

最近在尝试修复工作项目中 Express 服务的 WebInspect 扫描报告指出的漏洞,其中有涉及到需要修改服务响应头的部分。以前没怎么研究过 Express,正好借此机会实践一下。

📣 版本
node : 14.17.6
express : 4.17.1


关于 WebInspect

Micro Focus Fortify WebInspect 是 Micro Focus 公司旗下的一款企业级 Web 应用程序安全分析产品。

如今,很多代码管理制度完善的公司都把 WebInspect Scan 作为常规化 Security Scan 的其中一环,甚至集成到 CI/CD 流程中。

通常使用它的方式就是把要扫描的 Web url 或者 API url(基于所选择的扫描类型) 提供给 WebInspect 客户端,根据引导进行一些设置后开始扫描。

【最佳实践】如何修改 Express 服务响应头?
扫描过程中 WebInspect 会根据应用程序的行为和环境,多次从多角度进行定制访问攻击,找出可能存在的安全漏洞,并将它们归为 CriticalHighMediumLow 等几个风险等级,最终生成 Scan Report,其中会提供漏洞说明、解决方案、预防未来等内容。


报告分析

从扫描报告来看,目前应用有以下几个 vulnerability:

  • Cached SSL Content
  • Browser Mime Sniffing is not disabled
  • Missing HTTP Strict-Transport-Security Header
  • Inadequate Cross Site Scripting Header Protection

报告指出这些漏洞都与响应头有关,要么是某个字段的值有风险,要么是缺少了某个字段。
于是我在本地把项目 run 起来,随便找了个响应的资源查看响应头。

【最佳实践】如何修改 Express 服务响应头?
结果确实和报告的描述一致,而按照报告的修复建议,我需要对所有请求的响应头做如下更改:

    // 修改字段
    Cache-Control: no-store           // fix --> Cached SSL Content
    
    // 添加字段
    X-Content-Type-Options: nosniff   // fix --> Browser Mime Sniffing is not disabled
    X-XSS-Protection: 1; mode=block   // fix --> Inadequate Cross Site Scripting Header Protection
    Strict-Transport-Security: 3600   // fix --> Missing HTTP Strict-Transport-Security Header

具体为什么添加某个字段,可以修复某个漏洞,本文不做深究。
如感兴趣,可根据列出的漏洞名目,自行搜索。


修复

首先看看现有的服务架构:

    // ... other code ...
    const express = require('express');
    const app = express();
    
    const port = xxx;
    const targetDir = xxx;
    
    app.use(express.static(targetDir));
    app.listen(port, async function() { xxx });
    // ... other code ...

嗯…很经典的静态资源服务器写法,服务所有要访问的静态资源都放到了 targetDir 下,app.listen 开启一个端口来监听所有的 HTTP 请求,然后用 app.use 将所有来自 '/' 及其子路径下的请求先交给 Express 内置的提供静态资源服务的中间件 express.static 处理,让其提供 targetDir 下的对应文件。

于是,我们主要有两种方法在此基础上修改所有请求的响应头:

  • 在路由之前放置一个中间件,统一修改请求的响应头
    // ... other code ...
    const express = require('express');
    const app = express();
    
    const port = xxx;
    const targetDir = xxx;
    
    app.use((req, res, next) => {
        res.set('X-Content-Type-Options', 'nosniff');
        res.set('Cache-Control', 'no-store');
        res.set('X-XSS-Protection', '1; mode=block');
        res.set('Strict-Transport-Security', '3600');
        next();
    });
    
    app.use(express.static(targetDir));
    app.listen(port, async function() { xxx });
    // ... other code ...
  • 偶然看到 express.static 有额外的参数 setHeaders,可以在提供静态资源的时候,为其设置响应头,点此了解详情
    // ... other code ...
    const express = require('express');
    const app = express();
    
    const port = xxx;
    const targetDir = xxx;
    
    let options = {
        setHeaders: (res, path, stat) => {
            res.set('X-Content-Type-Options', 'nosniff');
            res.set('Cache-Control', 'no-store');
            res.set('X-XSS-Protection', '1; mode=block');
            res.set('Strict-Transport-Security', '3600');
        }
    };
    
    app.use(express.static(targetDir, options));
    app.listen(port, async function() { xxx });
    // ... other code ...

OK,生效了,收工下班 ╰(‵□′)╯

【最佳实践】如何修改 Express 服务响应头?


写在最后

One day you’ll leave this world behind. So live a life you will remember ! — Avicii

我是暮星,一枚有志于在前端领域证道的攻城狮。

优质前端内容持续输出中…,欢迎点赞 + 关注 + 收藏

【最佳实践】如何修改 Express 服务响应头?文章来源地址https://www.toymoban.com/news/detail-460374.html

到了这里,关于【最佳实践】如何修改 Express 服务响应头?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Cloud:构建微服务的最佳实践

    🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页 ——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍专栏》 🐾 学会IDEA常用操作,工作效率翻倍~💐 🌊 《100天精通Golang(基础

    2024年02月09日
    浏览(29)
  • 把Kubernetes用于微服务管理的最佳实践

    Kubernetes 是一个开源的容器编排引擎最初由 Google 在内部开发中使用,用于管理其容器集群。它可以自动化应用程序的部署、扩展和管理。 Kubernetes 具有以下优势: 可靠性:Kubernetes 具有自动容错和自我修复功能。 可扩展性:Kubernetes 可以轻松地扩展应用程序。 可移植性:K

    2024年02月05日
    浏览(30)
  • go最佳实践:如何舒适地编码

    有很多做法:你可以自己想出来,在互联网上找到,或者从其他语言中拿来,但由于其主观性,并不总是容易说哪一个比另一个好。”最佳”的含义因人而异,也取决于其背景,例如网络应用的最佳实践可能与中间件的最佳实践不一样。 为了写这篇文章,我带着一个问题看了

    2024年02月02日
    浏览(26)
  • 【最佳实践】如何设计 RESTful API ?

    良好的 API 设计是一个经常被提及的话题,特别是对于那些试图完善其 API 策略的团队来说。一个设计良好的 API 的好处包括:改进开发者体验、更快速地编写文档以及更高效地推广你的 API。但是,到底什么才构成了良好 API 设计呢?在这篇博客文章中,我将详细介绍几个为

    2024年02月07日
    浏览(25)
  • 【ArchSummit】阿里云原生微服务架构治理最佳实践

      前言 📫 作者简介 :小明java问道之路,专注于研究 Java/ Liunx内核/ C++及汇编/计算机底层原理/源码,就职于大型金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 📫 热衷分享,喜欢原创~ 关注我会给你带来一些

    2024年02月02日
    浏览(63)
  • DockerCompose - 微服务项目部署全过程(最佳实践)

    目录 一、微服务项目部署 1.1、项目介绍 1.2、准备 MySQL 初始化文件 1.3、pom.xml 插件 1.4、测试工作 1.5、编写 Dockerflie 文件 1.6、编写 DockerCompose.yml 文件 1.7、修改 application.yml 文件 1.8、打包上传服务器 1.9、微服务,启动! 1.10、测试结果 a)技术选型:SpringCloud 2021.0.1 、SpringC

    2024年04月16日
    浏览(31)
  • 什么是平台即服务 (PaaS)?定义、示例、组件和最佳实践

    什么是平台即服务 (PaaS)?   平台即服务(PaaS)是一种云端运算平台,第三方提供必要的软件和硬件资源。这些产品使客户能够开发、运行和管理业务应用,而无需维护此类软件开发流程所需的基础架构。    当今的数位世界不断用更新的技术,和数据轰炸组织。如此大量的

    2024年02月04日
    浏览(30)
  • 最佳实践 · 塔石串口服务器接入 MODBUS 物联网平台

    串口服务器是为RS-232/RS-485/RS-422终端到TCP/IP之间完成数据转换的通讯接口协议转换器。提供RS-232终端与TCP/IP网络的数据双向透明传输,提供串口转TCP/IP功能,RS-232/RS-485/RS-422转TCP/IP的解决方案。可以让RS-232/RS-485/RS-422串口设备立即联接网络。 串口通讯服务器其实就是串口服务器

    2024年02月16日
    浏览(34)
  • 基于AWS云服务构建智能家居系统的最佳实践

    在当今智能家居时代,构建一个安全、高性能、可扩展和灵活的智能家居系统已经成为许多公司的目标。亚马逊网络服务(AWS)提供了一系列云服务,可以帮助企业轻松构建和管理智能家居系统。本文将探讨如何利用AWS云服务构建一个智能家居系统,并分享相关的最佳实践。 系统架

    2024年03月26日
    浏览(77)
  • SpringCloud Gateway 在微服务架构下的最佳实践

    作者:徐靖峰(岛风) 本文整理自云原生技术实践营广州站 Meetup 的分享,其中的经验来自于我们团队开发的阿里云 CSB 2.0 这款产品,其基于开源 SpringCloud Gateway 开发,在完全兼容开源用法的前提下,做了诸多企业级的改造,涉及功能特性、稳定性、安全、性能等方面。 从功

    2024年02月14日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包