跳到正文
>_ITDITDWeb 安全平台

按框架

Express(Node.js)安全 — 守护要靠你自己添加

Express 是极简框架,默认几乎不提供任何守护。因此防御要靠你自己添加——安全响应头、输入校验、授权(不要止步于认证)、限流、以及依赖(npm)CVE 监控。以防御视角讲解要添加什么、怎么添加,不含攻击步骤。

发布于 2026-07-02 更新于 2026-07-02 2 分钟阅读

面向:在 Express(Node.js)上运营 API 或应用的人。这里不讲攻击步骤——只讲你要为极简框架『自己添加』的守护。要看全局,请参阅 按框架的安全防护入口

你要自己添加的守护(默认里没有的东西)

Express 只提供路由和中间件的地基。以下这些除非你自己添加,否则并不存在

安全响应头

CSP/HSTS/X-Content-Type 等。用 helmet 类中间件添加。

输入校验

未经校验的输入是 SQLi/XSS/注入的入口。

授权(所有者范围)

止步于认证,换个 ID 就能看到别人的数据(IDOR)。

限流

遏制登录暴力破解、API 滥用和 DoS。

依赖(npm)CVE

用机器监控并修补数量众多的依赖的已知缺陷。

密钥与 SSRF

密钥放进环境变量、不放代码 / 对外部请求做 SSRF 防护。

在 Express 上要自己添加的东西——这些框架默认并不守护。

如何堵住这些缺口(最少的五件事)

1

添加安全响应头

用 helmet 类中间件设置 CSP、HSTS、X-Content-Type-Options 等。它们默认并不设置,所以先加上以抬高基线。(→ 安全响应头检测
2

校验并净化所有输入

校验 body、query、params 和 headers。绝不要把未经校验的值直接传入数据库查询、HTML 或操作系统命令(注入防御)。
3

编写授权,而不只是认证

即便已登录,也要把每一次操作都限定在拥有目标对象的那个用户身上。忘了这一步,换个 ID 就能操作别的用户的数据(→ IDOR 是什么)。
4

限流与依赖 CVE 监控

给登录和 API 加上限流,遏制暴力破解和 DoS。用机器监控依赖(npm)CVE 并快速打补丁(→ 监控依赖包的 CVE)。对外部 URL 请求要防范 SSRF(→ SSRF 是什么)。

常见(危险)

  • 不带任何响应头的裸响应
  • 输入未经校验就传入数据库/HTML
  • 没有授权——“已登录=允许”
  • 没有限流,依赖 CVE 放着不修

正确

  • 通过 helmet 类中间件设置响应头
  • 输入经过校验与净化
  • 以所有者为范围的授权
  • 限流 + 依赖 CVE 监控 + 快速打补丁

本站的视角:极简框架把自由和责任一并交给你

Express 的魅力在于轻量与自由——这也意味着防御要由你自己来设计。本站是另一套技术栈,但对 Node 而言要点是一样的:设置响应头、校验输入、在所有对外入口都写好授权、并在每次部署前审计依赖的 CVE。Node 的依赖数量尤其庞大,所以依赖的新鲜度往往决定事故的成败。请放下“框架会替我守好”的假设,把防御明确地加上去——这才是用好 Express 的正确姿势。

接下来读

FAQ

QExpress 是一个安全的框架吗?
A

Express 在设计上就是『极简主义』——它只提供路由和中间件的地基,几乎不内置任何安全功能。所以它既不安全也不危险,防御要靠你自己添加。与 Rails 或 Laravel 这类默认守护很多的框架不同,你必须自己接入响应头、输入校验、授权和限流。自由更多,责任也更多。

Q我需要 helmet 这样的安全响应头吗?
A

需要。Express 默认不设置与安全相关的 HTTP 响应头。用 helmet 类的中间件添加 CSP、HSTS、X-Content-Type-Options 等,可以降低点击劫持、MIME 嗅探这类基础风险。仅仅是加上它就能整体抬高一层安全基线,因此值得优先接入。

Q最低限度要做什么?
A

(1) 添加安全响应头(helmet 类);(2) 校验并净化所有输入;(3) 不要止步于登录(认证)——编写以所有者为范围的授权;(4) 对登录和 API 做限流;(5) 用机器监控依赖(npm)CVE 并快速打补丁。这五件事就能填补极简框架的大部分缺口。