尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Helmet设置的13个HTTP安全响应头全解:默认值、作用与禁用开关完整清单

Helmet设置的13个HTTP安全响应头全解:默认值、作用与禁用开关完整清单 Helmet设置的13个HTTP安全响应头全解默认值、作用与禁用开关完整清单【免费下载链接】helmetHelp secure Express apps with various HTTP headers项目地址: https://gitcode.com/gh_mirrors/he/helmetHelmet是 Node.js / Express 生态中最流行的 HTTP 安全中间件它的核心价值一句话就能说清一行app.use(helmet())自动为你的应用设置 13 个 HTTP 安全响应头帮你拦截 XSS、点击劫持、MIME 嗅探、中间人攻击等常见 Web 威胁。本文带你完整梳理这 13 个响应头的默认值、实际作用与禁用开关一份清单看完不再踩坑。️为什么需要 HTTP 安全响应头浏览器本身提供了很多安全防护机制如 CSP、跨源隔离、Referrer 策略但这些机制都依赖服务器主动发送特定的响应头来启用。Express 默认几乎什么都不设Helmet 的价值就在于开箱即用地把该开的都开了该关的帮你关。它的实现非常轻量主入口 index.ts 只是把 13 个独立中间件按顺序串联起来每个响应头对应middlewares/目录下的一个独立模块方便按需关闭或单独配置。30秒上手安装与启用安装后只需三行代码完整说明见 README.mdimport helmet from helmet; const app express(); app.use(helmet()); // 自动设置 13 个安全响应头注意一个常见错误必须写helmet()调用后才能传给app.use否则会触发 index.ts 中的友好报错提示。13个HTTP安全响应头总览清单先看全貌这张表是本文的核心#响应头默认值是否默认启用禁用开关对应源码1Content-Security-Policydefault-src self等一整套指令✅contentSecurityPolicy: falsecontent-security-policy2Strict-Transport-Securitymax-age31536000; includeSubDomains✅strictTransportSecurity: falsestrict-transport-security3X-Frame-OptionsSAMEORIGIN✅xFrameOptions: falsex-frame-options4X-Content-Type-Optionsnosniff✅xContentTypeOptions: falsex-content-type-options5X-DNS-Prefetch-Controloff✅xDnsPrefetchControl: falsex-dns-prefetch-control6X-Download-Optionsnoopen✅xDownloadOptions: falsex-download-options7X-Permitted-Cross-Domain-Policiesnone✅xPermittedCrossDomainPolicies: falsex-permitted-cross-domain-policies8X-Powered-By直接移除该头而非设置值✅xPoweredBy: falsex-powered-by9X-XSS-Protection0关闭旧过滤器✅xXssProtection: falsex-xss-protection10Referrer-Policyno-referrer✅referrerPolicy: falsereferrer-policy11Cross-Origin-Opener-Policysame-origin✅crossOriginOpenerPolicy: falsecross-origin-opener-policy12Cross-Origin-Resource-Policysame-origin✅crossOriginResourcePolicy: falsecross-origin-resource-policy13Origin-Agent-Cluster?1✅originAgentCluster: falseorigin-agent-cluster 另有第 14 个头Cross-Origin-Embedder-PolicyCOEP存在但默认关闭需要显式开启见下文说明。逐个精讲每个头到底在防什么1️⃣ Content-Security-Policy防 XSS 的内容安全策略这是 13 个头上功能最强、也最需要按项目配置的一个。它通过script-src、style-src等指令限制页面能加载哪些资源从源头压制跨站脚本XSS攻击。Helmet 的默认策略见 getDefaultDirectives大致是default-src self; base-uri self; font-src self https: data: form-action self; frame-ancestors self; img-src self data: object-src none; script-src self; script-src-attr none style-src self https: unsafe-inline; upgrade-insecure-requests几个实用要点想覆盖某条指令在directives里按 kebab-case 名传入数组即可想把某条默认指令删掉值设为null想只上报不拦截调试期推荐设置reportOnly: true头名会变成Content-Security-Policy-Report-Onlydefault-src是安全底线想删它必须使用专门的dangerouslyDisableDefaultSrc开关见 util.ts 所在模块的 类型定义避免误删导致全开。2️⃣ Strict-Transport-SecurityHSTS强制 HTTPS默认值为max-age31536000; includeSubDomains一年 子域名生效默认值逻辑在 index.ts。它告诉浏览器今后一年内只允许走 HTTPS可防 SSL 剥离等中间人攻击。可选配置项maxAge有效期秒includeSubDomains是否含子域默认含preload是否申请进入浏览器预加载列表。⚠️ 常见拼写坑选项必须写作includeSubDomains大写 D写成includeSubdomains会直接抛错校验逻辑。3️⃣ X-Frame-Options防点击劫持默认SAMEORIGIN表示页面只允许被同域的iframe/frame嵌入。攻击者常用透明 iframe 盖一层来骗用户点击这个头能直接让嵌入失败。可选值只有两个deny完全禁止嵌入与sameorigin默认见 x-frame-options。4️⃣ X-Content-Type-Options禁止 MIME 嗅探固定值nosniff无可选配置。它阻止浏览器自作聪明地猜测内容类型——比如把上传的图片当成 HTML 执行是防图片 XSS的关键一环。5️⃣ X-DNS-Prefetch-Control关闭 DNS 预解析默认off关闭预解析防止未引用的主机名被提前解析泄露。仅allow: true一个开关对应值变为on。现代浏览器对 DNS 预解析支持本就在弱化保持默认off即可。6️⃣ X-Download-Options防 IE 本地文件直开固定值noopen。作用很老派防止旧版 IE 把下载的 HTML 文件在本地直接打开执行。没有配置项新项目可放心保留或关掉影响面极小。7️⃣ X-Permitted-Cross-Domain-Policies收紧 crossdomain.xml默认none表示本域不响应任何 crossdomain.xml 跨域策略请求。该头主要针对 Adobe Flash/Flex 类跨域配置攻击面。可选值none默认/master-only/by-content-type/all完整列表见 ALLOWED_PERMITTED_POLICIES。8️⃣ X-Powered-By信息抹除而非设置这个头比较特殊Helmet 不是给它设值而是直接把 Express 默认的X-Powered-By: Express删掉实现仅一行 removeHeader。暴露框架信息会给攻击者提供指纹删除它属于少即是多的安全设计。9️⃣ X-XSS-Protection主动关闭旧式 XSS 过滤器值固定为0看起来反直觉其实是正确姿势老版本浏览器的内置 XSS 过滤器存在绕过和引入新漏洞的问题如block-insecure-x副作用安全社区共识是交给 CSP关掉它。所以 Helmet 主动发送0关闭该过滤器。 Referrer-Policy控制 Referer 泄漏默认no-referrer——对外发请求完全不带Referer 头防止 URL 中可能包含的敏感参数token、session 等泄漏给第三方站点。支持 8 种标准策略值比如想改为strict-origin-when-cross-origin同源不带、跨源只带 origin 且 HTTPS 才带只需改一个数组合法值白名单见 referrer-policy。1️⃣1️⃣ Cross-Origin-Opener-PolicyCOOP窗口隔离默认same-origin让页面在独立进程组中运行防止window.opener跨源读写等窗口攻击也是启用共享内存 APISharedArrayBuffer的前提之一。可选值same-origin/same-origin-allow-popups/noopener-allow-popups/unsafe-none。1️⃣2️⃣ Cross-Origin-Resource-PolicyCORP资源加载边界默认same-origin声明本域资源只允许同源页面加载与 COEP 配对使用能缓解 Spectre 类侧信道与信息泄漏。可选值same-origin/same-site/cross-origin。1️⃣3️⃣ Origin-Agent-Cluster缓存与存储隔离固定值?1让不同源的页面在浏览器中进入独立的 Agent Cluster隔离缓存、Cookie 存储进一步缩小跨源攻击面。该头无任何配置项传对象只会触发 警告。 隐藏成员Cross-Origin-Embedder-Policy默认关闭COEP 与上三个头共同构成跨源隔离全家桶默认值为require-corp。但它默认不启用——因为启用后页面无法加载任何未带 CORP 的跨域资源容易把现有页面弄挂。需要时显式开启app.use( helmet({ crossOriginOpenerPolicy: true, crossOriginEmbedderPolicy: true, // 显式开启默认值 require-corp }), );可选策略见 COEP 模块。一键禁用任意响应头完整开关清单Helmet 的设计哲学是每个头都能独立关闭。只需把对应选项设为falseREADME 配置章节 有官方示例例如app.use( helmet({ contentSecurityPolicy: false, // 关闭 CSP xDownloadOptions: false, // 关闭 X-Download-Options }), );选项名新旧对照表旧别名仍可用见 index.ts 导出列表新选项名旧别名Legacy响应头strictTransportSecurityhstsStrict-Transport-SecurityxContentTypeOptionsnoSniffX-Content-Type-OptionsxDnsPrefetchControldnsPrefetchControlX-DNS-Prefetch-ControlxDownloadOptionsieNoOpenX-Download-OptionsxFrameOptionsframeguardX-Frame-OptionsxPermittedCrossDomainPoliciespermittedCrossDomainPoliciesX-Permitted-Cross-Domain-PoliciesxPoweredByhidePoweredByX-Powered-ByxXssProtectionxssFilterX-XSS-Protection⚠️ 同一个头新旧选项名不能同时写否则直接抛错双重指定校验例如同时传hsts和strictTransportSecurity会立即失败。总结新手如何正确姿势使用 Helmet✅默认全开是安全基线绝大多数项目无需任何配置 需要定制时优先只动 Content-Security-Policy先用reportOnly灰度 某个头与你的业务冲突比如要嵌入第三方 iframe只把那一个设为false别整体放弃 需要共享内存 API如 WebRTC 高性能场景时再显式开启 COEP 每个头的行为都可溯源到独立模块目录结构见 middlewares/。记住这套13 个头 1 个隐藏头的清单再对照上表逐项核对你的 Express 应用就拥有了浏览器原生安全机制的完整加持。【免费下载链接】helmetHelp secure Express apps with various HTTP headers项目地址: https://gitcode.com/gh_mirrors/he/helmet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表