manage-headers 是 microsoft/power-platform-skills 仓库下的一个技能,用途是检查和配置 Power Pages 站点向浏览器发送的 HTTP 安全响应头。
用途 它帮助站点管理员盘点并补齐安全头配置,涉及内容安全策略(CSP)、框架与点击劫持防护(X-Frame-Options / frame-ancestors)、阻止浏览器猜测文件类型(X-Content-Type-Options)、跨域调用相关头(CORS)、Cookie 的 SameSite 设置等。
配置方式 所有头都作为 HTTP/* 站点设置,保存在 .powerpages-site/site-settings/ 目录下的 YAML 文件中。每个头对应一个独立的 .yml 文件,文件名用 - 代替 /,例如 HTTP/X-Frame-Options 对应 http-x-frame-options.sitesetting.yml。
关键规则(资料中明确列出的注意事项)
- 站点设置缺失即表示不发送该头;运行时完全省略该头(新站点的 CSP 除外,详见 headers-reference.md)。
- HSTS 和 Cache-Control 由平台管理。不要尝试设置 HTTP/Strict-Transport-Security,运行时不识别该设置,设置无效。
- Maker 模式会跳过这些头。来自 Power Pages Studio 的请求不发送任何 HTTP/* 头,应在无痕标签页而非 Studio 预览中验证。
- CSP 是透传的:运行时原样输出该值,不会自动合并运行时来源。CSP 必须包含 Power Pages 运行时主机,否则站点会出问题。
- CSP nonce:当 script-src 包含 'nonce' 时,运行时按请求替换为 'nonce-<random>',并自动为内联事件处理器添加哈希。通过 document.createElement 动态创建的脚本不会获得该 nonce。
- SameSite=None 需要 HTTPS。运行时在 HTTPS 下会自动为每个 Cookie 设置 Secure。
- CORS 的 * 会被自动具体化:运行时按请求将 * 替换为具体的请求 Origin,浏览器看到的是单一来源头而非通配符。
工作流程
- 前置条件:定位项目(通过 Glob 查找 **/powerpages.config.json),确认 .powerpages-site/site-settings/ 目录存在;不存在则说明站点尚未部署,建议先运行 /deploy-site 并停止。
- 检查现有头:读取目录下所有 *.yml 文件,提取 name 和 value 字段,找出所有以 HTTP/ 前缀的设置,并与 headers-reference.md 中识别的头目录对比,记录已存在项与缺失项。对 CSP 还会扫描项目源文件中的外部 URL,并通过 pac auth who 确定站点所属云环境,以匹配正确的 Power Pages 运行时主机。
- 评估与规划:仅使用日常语言向用户解释各头作用,按重要性优先展示缺口;每个缺口通过交互逐一让用户选择接受建议、自定义或跳过。CSP 的组成包含起始模板、对应云的运行时主机、从源文件扫描到的外部 URL,以及用于内联脚本的 'nonce' 关键字;建议先以报告模式(HTTP/Content-Security-Policy-Report-Only)运行再强制执行。
- 应用更改:已存在的设置直接用 Edit 修改 YAML 文件的 value 字段;新设置使用共享脚本 create-site-setting.js,参数包括 --projectRoot、--name、--value、--description。全部应用后询问是否部署,因为头更改需下次部署后才生效。
- 总结:以日常语言说明改了哪些、还剩哪些缺口、哪些已配置良好;记录技能使用(--skillName "ManageHeaders");如有自然的后续步骤则提出建议。
审查模式 若 $ARGUMENTS 包含 --review <out-dir>,则跳过应用与总结步骤,只读取已配置的 HTTP/* 设置,编写 <REVIEW_DIR>/header-annotations.json,为每个头提供日常语言描述,并在值确有问题时给出可选修复建议,然后运行 transform-headers.js 并将标准输出写入 <REVIEW_DIR>/manage-headers.json。
限制与注意事项
- 必须使用日常语言,不得向用户使用 CSP、CORS、HSTS、MIME sniffing 等技术术语作为开场。
- headers-reference.md 是推荐值与头目录的权威来源,评估前需先阅读。
- 所有推荐必须结合站点实际配置与用法:推荐前阅读源文件、集成与鉴权设置,确认不会破坏站点功能。
- 不得建议放宽已有的严格策略;不要推荐 CSP 中使用 https: 通配符,应列出具体主机。
- 对于 Cross-Origin-Opener-Policy,需确认站点是否使用弹窗式鉴权;对于 Cross-Origin-Resource-Policy,需确认站点是否托管 Azure AD B2C 自定义登录页、是否被跨域嵌入或有集成加载其资源,不确定时保持缺失或使用 cross-origin。
- 更改后必须部署才生效,应用后应始终提供 /deploy-site。
参考资料
- references/headers-reference.md:识别的头目录、推荐值、CSP 组合规则、运行时来源。
- references/commands.md:共享脚本 create-site-setting.js 的用法。
该技能依赖上述参考文件与脚本(如 check-version.js、create-site-setting.js、transform-headers.js)。关于插件的具体安装方式、定价与支持平台,资料中暂未提供。