ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

将 SecurityHeaders 评分从 A 提升到 A+,核心在于 “查漏补缺”和“策略收紧”

将 SecurityHeaders 评分从 A 提升到 A+,核心在于 “查漏补缺”和“策略收紧” 目录 A级在评分体系中的位置 A级意味着什么已实现与待提升 要将 SecurityHeaders 评分从 A 提升到 A核心在于 “查漏补缺”和“策略收紧”。 实施路径从 A 到 A1. 审查并收紧 CSP 策略2. 添加“跨域隔离”安全头3. 检查其他安全头 配置参考 总结与验证在 SecurityHeaders.com 的评分体系中A级代表了一个“良好”且“强劲”的安全基线--1。这意味你的网站已正确配置了绝大多数关键的安全响应头能有效防御常见的Web攻击如点击劫持、MIME类型嗅探等。获得A级说明网站的安全团队已经有意识地遵循了如OWASP等安全框架的最佳实践-。 A级在评分体系中的位置为了更清楚地理解A级的含义可以参考以下不同来源的评分标准等级含义 (Connected.app)--1百分制分数 (Apify)-17百分制分数 (HailBytes)-15A所有主要安全头均已配置且策略强劲-95-100 (优秀)-17≥ 90%-15A强劲的实施存在微小差距--185-94 (良好)-17≥ 75%-15B部分实施一些头缺失或较弱-70-84 (可接受)-17≥ 60%-15可以看到A级代表你已经完成了绝大部分工作安全态势良好。 A级意味着什么已实现与待提升✅ 你已经做对了什么获得A级的基础核心安全头已到位你的网站很可能已经配置了Strict-Transport-Security(HSTS)、X-Frame-Options、X-Content-Type-Options、Referrer-Policy和Permissions-Policy等关键安全头-4。防御基础攻击这些配置可以有效防御协议降级攻击、点击劫持、MIME类型嗅探等常见威胁-1。⚠️ 为什么是A而不是A通常的微小差距根据分析从A级到A级的差距通常在于一些“锦上添花”的细节--1最常见的原因是Content-Security-Policy (CSP) 策略不够严格这是最常见的原因。你的CSP策略可能使用了unsafe-inline或unsafe-eval等较为宽松的指令或者没有覆盖所有资源类型如字体、连接等--1。缺少一个或多个“加分项”头例如Cross-Origin-Embedder-Policy(COEP)、Cross-Origin-Opener-Policy(COOP)、Cross-Origin-Resource-Policy(CORP) 等较新的跨域隔离安全头-4。 要将 SecurityHeaders 评分从A提升到A核心在于“查漏补缺”和“策略收紧”。根据官方说明达到 A 意味着网站发出了所有被检测的安全响应头-15-。从 A 到 A 的差距通常就在于以下几点Content-Security-Policy(CSP) 策略不够严格这是最常见的原因比如使用了unsafe-inline等不安全指令-。缺少“跨域隔离”相关头例如Cross-Origin-Embedder-Policy(COEP)、Cross-Origin-Opener-Policy(COOP) 等-18。 实施路径从 A 到 A1. 审查并收紧 CSP 策略这是最关键的一步。你的目标应该是移除所有不安全的关键词如unsafe-inline和unsafe-eval。使用nonce(一次性随机数) 管理内联脚本这是最推荐的方式。为每个合法的script标签生成一个唯一的nonce属性并在 CSP 头中白名单这个nonce-18。使用strict-dynamic关键词配合nonce使用可以信任由白名单脚本动态创建的脚本简化管理。使用hash管理内联脚本如果脚本内容固定不变可以计算其哈希值并在 CSP 中声明。示例一个更严格的 CSP 策略# Nginx add_header Content-Security-Policy default-src self; script-src self nonce-{RANDOM} strict-dynamic; style-src self unsafe-inline; img-src self data: https:; font-src self; connect-src self; frame-ancestors self; base-uri self; form-action self; object-src none; upgrade-insecure-requests always;注意unsafe-inline在style-src中仍然常见因为很多框架依赖内联样式。理想情况下也应移除但这需要更复杂的配置。2. 添加“跨域隔离”安全头这几个是 SecurityHeaders 检查的加分项-。它们能提供更高级别的隔离和保护尤其在使用SharedArrayBuffer等高级 API 时是强制要求-18。Cross-Origin-Embedder-Policy(COEP)要求所有跨域资源必须显式声明允许被嵌入-。Cross-Origin-Opener-Policy(COOP)将顶级文档与跨源窗口隔离-。Cross-Origin-Resource-Policy(CORP)限制哪些网站可以加载本资源。⚠️ 警告添加这些头可能会破坏第三方资源如广告、验证码的加载-。务必在测试环境验证或先在部分页面如主HTML上启用-。3. 检查其他安全头确保以下头已正确配置达到 A 级时应该都已具备-Strict-Transport-SecurityX-Frame-OptionsX-Content-Type-OptionsReferrer-PolicyPermissions-Policy 配置参考以下是根据 Security-Headers-Guide 整理的、旨在获取 A 评级的配置示例。Nginxadd_header Strict-Transport-Security max-age31536000; includeSubDomains; preload always; add_header Content-Security-Policy default-src self; script-src self nonce-{RANDOM} strict-dynamic; style-src self unsafe-inline; img-src self data: https:; font-src self; connect-src self; frame-ancestors self; base-uri self; form-action self; object-src none; upgrade-insecure-requests always; add_header X-Frame-Options SAMEORIGIN always; add_header X-Content-Type-Options nosniff always; add_header Referrer-Policy strict-origin-when-cross-origin always; add_header Permissions-Policy geolocation(), microphone(), camera(), payment(), usb(), browsing-topics(), interest-cohort() always; add_header Cross-Origin-Opener-Policy same-origin always;[reference:17][reference:18] add_header Cross-Origin-Embedder-Policy require-corp always;[reference:19][reference:20] add_header Cross-Origin-Resource-Policy same-origin always;Node.js (Express)app.use((req, res, next) { res.setHeader(Strict-Transport-Security, max-age31536000; includeSubDomains; preload); res.setHeader(Content-Security-Policy, default-src self; script-src self nonce-{RANDOM} strict-dynamic; style-src self unsafe-inline; img-src self data: https:; font-src self; connect-src self; frame-ancestors self; base-uri self; form-action self; object-src none; upgrade-insecure-requests); res.setHeader(X-Frame-Options, SAMEORIGIN); res.setHeader(X-Content-Type-Options, nosniff); res.setHeader(Referrer-Policy, strict-origin-when-cross-origin); res.setHeader(Permissions-Policy, geolocation(), microphone(), camera(), payment(), usb(), browsing-topics(), interest-cohort()); res.setHeader(Cross-Origin-Opener-Policy, same-origin); res.setHeader(Cross-Origin-Embedder-Policy, require-corp); res.setHeader(Cross-Origin-Resource-Policy, same-origin); next(); }); 总结与验证要获得 A 评级关键在于将 CSP 策略配置得既强大又精准并添加跨域隔离头COOP, COEP, CORP。验证步骤测试环境先行先在测试环境应用上述配置。使用Report-Only模式对于 CSP可以先使用Content-Security-Policy-Report-Only头观察几天收集违规报告确保不会破坏网站功能-18。重新扫描配置生效后再次使用 SecurityHeaders.com 扫描验证。
返回列表