关于 experience-lwc-security-validate
用于审查 Lightning Web Component 的 Lightning Web Security 与产品安全问题的技能,面向组件发布前检查或回归验证。支持审查并应用修复,或生成 SARIF 2.1.0 报告;两种模式使用同一规则集。
主要功能
- 01按 LWS 规则检查组件文件
- 02检查 HTML 模板与组件元数据
- 03审查模式输出分级发现并应用修复
- 04评分模式生成 SARIF 2.1.0
- 05验证修复并运行组件测试
适用场景
- 01发布前审查 LWC 安全性
- 02修复后检查组件是否出现安全回归
- 03为 CI 门禁生成机器可读的安全发现
- 04检查模板、元数据及 Apex 调用模式
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ forcedotcom/ sf-skills --skill experience-lwc-security-validate安装后在 Claude Code 中输入/experience-lwc-security-validate确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
examples/review-report.mdscore-report.sarif.jsonreferences/lws-security-expert.mdsecurity-analysis.mdscripts/check-lwc-import.shvalidate-sarif.sh详细介绍
审查 LWS 安全性
对 Lightning Web Component 执行结构化的 Lightning Web Security(LWS)和产品安全合规检查。提供两种输出模式:
- 审查模式(默认)——按严重性排列的发现 + 已应用的代码修复。
- 评分模式——生成以 LWS 规则目录(
lws-001…lws-023b)为键的 SARIF 2.1.0 JSON 报告,用于下游门控、评估评分或 CI 导入。
两种模式使用参考资料中的同一套检测规则;区别仅在于输出格式。
适用场景
- 用户要求对特定 LWC 进行“安全审查”“LWS 检查”“发布前安全审计”或“合规检查” → 使用审查模式。
- 用户要求为组件安全性“评分”,或希望获得机器可读的发现,以便输入门控或评估 → 使用评分模式。
- 为组件发布做准备,需要统一的安全报告。
- 实施修复后,验证安全态势没有退化。
不要将此技能用于:
- 构建新组件(使用
experience-lwc-generate)。 - 无障碍(单独应用 WCAG 2.2)或 RTL 审查——不在范围内。
- 在功能标志后为修复设置门控(修复合入后再应用功能标志门控)。
- 非 LWC 安全审查(Apex、Aura、服务器端)——不在范围内。
前提条件
- 组件路径(
modules/…下的 LWC 包)。 - 可访问组件的 JS/TS、HTML 模板、CSS 和
.js-meta.xml。 - 输出模式:
review(默认——查找、修复并报告)或score(查找并生成 SARIF JSON,不要修改代码)。如果用户的请求没有明确指出模式,请在开始前与用户确认。
知识库
每份参考资料都是事实依据。不要凭记忆总结——打开参考资料,应用其中的指南,并在报告中引用所用的具体章节。
- Lightning Web Security(LWS)目录:LWS Security Expert——列出受阻 API 及其允许的替代方案。
- 规则目录(
lws-001…lws-023b):Product Security Framework——每条规则都列出了检测模式,以及规范的 SARIFruleId/level/message模板。评分模式会使用这些确切值,为每个匹配项生成一条 SARIF 结果。
工作流
第 1 步——确定审查范围
收集组件路径并确定要审查的文件。包含组件包中的每个文件:.html、.js/.ts、.css、.js-meta.xml,以及由同一团队维护、且由目标组件调用的任何子组件。
记录现有的功能标志门控——需要修改代码的发现必须遵守这些门控。
第 2 步——阅读知识库
在作出判断前,从头到尾阅读 LWS Security Expert 和 Product Security Framework。LWS 参考资料列出了受阻的 DOM API 及其允许的替代方案;Product Security 框架提供了严重性分类、包含 23 条规则的 SARIF 目录和修复模式。
步骤 3 — 遍历规则目录
针对组件包运行 Product Security Framework 中的每条规则(lws-001 至 lws-023b)。对于每条规则:
- 严格套用 “How to Find the Issue” 中的模式。不要走捷径——每条规则都列出了必须考虑的混淆模式(方括号表示法、Unicode 转义、
Reflect.*、字符串拼接)。 - 对每个匹配项记录:
ruleId、level(目录中的error/warning)、file、startLine、startColumn(未知时填 1)、message(使用目录中的message模板,并替换代码中的实际{placeholder})。 - 如果某条规则有前置条件“仅分析从 'lwc' 导入的文件”(lws-008),则通过
scripts/check-lwc-import.sh <file>检查——存在from 'lwc'导入时,脚本会输出lwc-import=yes,否则输出lwc-import=no。如果结果为no,则跳过该文件的此规则。
此目录是权威检测清单;后续 JS/TS、HTML 和 .js-meta.xml 条目是 SARIF 规则之外的附加检查。
步骤 4 — HTML 模板检查(附加)
检查每个模板中的以下内容:
- 使用
lwc:inner-html的情况——验证来源是否可信。 - 未转义的表达式是否传入了 LWS 视为敏感的属性(
href、src、srcdoc、内联事件处理程序)。 - 带绑定表达式的直接
style="…"——可考虑改用 CSS 类。 - 未设置沙箱的嵌入式
<iframe>或<object>(步骤 3 会通过 lws-023a/lws-023b 检查srcdoc和协议相关情况;此步骤检查是否缺少sandbox属性)。
步骤 4-5 中发现的问题使用规则 ID lws-tpl-001…lws-tpl-NNN(HTML)和 lws-meta-001…lws-meta-NNN(元数据)——在报告中按发现的问题依次编号,以免与 SARIF 目录中的规则冲突。
步骤 5 — 元数据与配置检查(附加)
检查 .js-meta.xml 中的以下内容:
- 过于宽泛的 API 访问权限(
lightning__FlowScreen、lightning__AppPage等),而组件并不需要这些权限。 - 暴露的包含敏感数据的公共属性。
- 缺少针对目标界面的
capabilities限制。
检查 Apex 绑定中的以下内容:
- 使用
@wire调用 Apex 方法,但未设置@AuraEnabled(cacheable=true),而此处适合缓存。 - 绕过权限检查的直接命令式调用。
步骤 4-5 中发现的问题使用规则 ID lws-tpl-001…lws-tpl-NNN(HTML)和 lws-meta-001…lws-meta-NNN(元数据)——在报告中按发现的问题依次编号,以免与 SARIF 目录中的规则冲突。
步骤 6 — 生成报告
根据先决条件中确认的模式选择输出格式。
审查模式(默认)
使用 examples/review-report.md 作为模板——在 ## Security (LWS + Product) 下,每个发现的问题对应一个项目符号;在 ## Summary 下提供一行总计。
严重程度排序:Critical → High → Medium → Low(将 SARIF error 映射为 High,warning 映射为 Medium,除非规则另有说明)。注明每个问题对应的参考章节(例如,“Product Security § lws-001 document.createProcessingInstruction”)。
评分模式
仅输出一份 SARIF 2.1.0 JSON 文档,不得包含其他内容。前后不得添加文字。不要将 JSON 写入文件;直接内联返回。results 数组为空表示未发现问题。
使用 examples/score-report.sarif.json 作为结构参考——保持相同的顶层结构($schema、version、runs[0].tool.driver.rules[]、runs[0].results[]),并填入实际触发的规则和匹配项。
规则:
ruleId必须与目录中的条目完全一致(lws-001…lws-023b,或步骤 4-5 中的lws-tpl-*/lws-meta-*命名空间)。- 对于目录中标记为
level: error的规则,level为error;对于标记为level: warning的规则,level为warning。不得使用其他值。 message.text使用目录中的message模板,并替换占位符(例如,将{eventName}替换为代码中找到的实际事件名称)。- 每个匹配项对应一个
result。如果某条规则在一个文件中触发三次,则输出三个结果。 tool.driver.rules中仅包含已触发的规则;即使results数组为空,也必须包含tool.driver.rules(使用[])。
步骤 7 — 应用修复(仅限审查模式)
评分模式下跳过——评分模式为只读。
对于每个已接受的问题:
- 编辑组件文件(HTML、JS/TS、CSS、meta.xml)以应用修复。
- 保留现有的正确行为和功能标志门控。如果针对同一问题已配置门控,请保持不变。为分阶段推出而新增的功能标志门控不在此技能范围内——请另行应用。
- 不要悄悄删除旧代码——需要门控时,请保留原有路径。
- 不要为了让测试通过而降低安全性;如果测试依赖不安全模式,请修复测试。
步骤 8 — 验证
- 审查模式:针对更新后的文件重新运行步骤 3 的目录扫描;所有已修复的问题都不得再出现。运行 Jest 测试和所有组件级安全测试。如果修复涉及 Apex 访问模式,请与服务端审查人员确认权限。
- 评分模式:返回前,将生成的 SARIF 写入临时文件,并运行
scripts/validate-sarif.sh <path>——该脚本会确认 JSON 可解析、version为2.1.0、每个ruleId都符合目录模式(lws-NNN[a-z]?/lws-tpl-NNN/lws-meta-NNN)且已在tool.driver.rules中声明、每个level都是error或warning,并且每个结果都包含physicalLocation.artifactLocation.uri和region.startLine。返回 SARIF 前,请修复所有失败项。
交叉引用
- 相关技能:
experience-lwc-generate— 用于编写从一开始就符合安全要求的新 LWC 包。design-systems-slds-validate— SLDS/设计系统合规性检查(可访问性与 WCAG 2.2 有交集——请单独运行)。dx-code-analyzer-run— 全仓库静态分析检查;与此技能配合使用,可覆盖 LWS 目录之外的内容。
验证
- 已针对该包评估所有目录规则(
lws-001…lws-023b),而非仅检查人工挑选的子集。 - 每个问题都已应用修复(审查模式)或在 SARIF 结果中列出(评分模式),或者附有说明原因的明确延期备注。
- 每个问题都引用了具体的目录规则 ID——不得使用自由形式的“看起来可疑”条目。
- 修复没有引入新的 XSS 注入点、不安全的 URL 流程或受限的 DOM API。
- 评分模式的输出是有效的 SARIF 2.1.0 JSON,直接内联返回,且不带任何外围说明文字。