关于 pr-review
用于安全代码审查的技能,规定了相对于分支 x 检查变更的流程,优先关注安全性、正确性和架构,并要求逐文件分析及架构图。
主要功能
- 01基于 x 确定 PR 差异范围
- 02逐文件变更与风险分析
- 03检查机密信息和授权
- 04依赖项及平台安全审查
- 05结构化审查结果与图示
适用场景
- 01审查涉及安全敏感内容的代码变更
- 02评估依赖项和 manifest 更新
- 03生成可执行的 PR 审查报告
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ onekeyhq/ app-monorepo --skill pr-review安装后在 Claude Code 中输入/pr-review确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
reference/cross-platform.mddependency-audit.mdfile-analysis.mdreact-performance.md详细介绍
安全 PR 审查
输出语言:所有审查报告内容均使用中文。
审查代码变更时,请遵循以下工作流。优先级:安全性 > 正确性 > 架构 > 性能。
审查范围(基准分支)
- 审查范围:将
x视为基准(main)分支。始终审查当前分支(HEAD)与x之间的 PR 差异(即此分支相对于x引入的变更)。 - 生成差异时使用 PR 语义:
git fetch origin && git diff origin/x...HEAD(三点语法),只审查此分支相对于x引入的变更。
0) 确定变更范围并分析文件结构
- 确定发生了哪些变更(文件、模块、入口点、路由/屏幕)。
- 确定风险区域:身份验证流程、签名/密钥、网络、分析、存储、依赖项更新。
0.1 文件变更清单(必需)
使用以下格式生成所有变更文件的结构化概览:
## PR File Structure Analysis
### Changed Files Summary
| File | Change Type | Category | Risk Level | Description |
|------|-------------|----------|------------|-------------|
| `path/to/file.ts` | Added/Modified/Deleted | UI/Logic/API/Config/Test | Low/Medium/High | Brief description |
### Files by Category
#### 🔐 Security-Critical Files
- Files touching auth, crypto, keys, secrets
#### 🌐 API/Network Files
- Files with network requests, API calls
#### 🧩 Business Logic Files
- Core logic, state management, services
#### 🎨 UI Component Files
- React components, styles, layouts
#### ⚙️ Configuration Files
- package.json, configs, manifests
#### 🧪 Test Files
- Unit tests, integration tests
#### 📦 Dependency Changes
- package.json, lockfile changes
0.2 逐文件分析(必需)
对于每个变更文件,请提供:
### `path/to/file.ts`
**Change Type**: Added | Modified | Deleted
**Lines Changed**: +XX / -YY
**Category**: UI | Logic | API | Config | Test
**Risk Level**: Low | Medium | High | Critical
**What This File Does**:
- Primary responsibility of this file
**Changes Made**:
1. Specific change 1
2. Specific change 2
3. ...
**Dependencies**:
- Imports from: [list key imports]
- Exported to: [list files that import this]
**Security Considerations**:
- Any security-relevant aspects
**Cross-Platform Impact**:
- [ ] Extension
- [ ] Mobile (iOS/Android)
- [ ] Desktop
- [ ] Web
1) 密钥 / PII / 隐私(必须)
- 不得让日志/遥测/错误报告包含:助记词/种子短语、私钥、签名载荷、API 密钥、令牌、Cookie、会话 ID、与身份相关联的地址或任何 PII。
- 检查所有“数据外泄路径”:
console.*、日志工具、分析 SDK、错误报告、网络请求和持久化:- Web:localStorage / IndexedDB
- RN:AsyncStorage / secure storage
- 桌面端:文件系统 / keychain / sqlite
- 如果存在任何潜在泄露,请明确记录:
- 来源(哪些敏感数据),
- 去向(数据流向何处),
- 触发条件(何时发生),
- 影响(谁/什么会暴露),
- 修复方案(具体的补救措施)。
2) 身份验证 / 授权(必须)
- 确认身份验证中间件/守卫覆盖所有受保护路由,且无法绕过。
- 确认授权检查(角色/权限)正确且一致。
- 确认服务端/客户端信任边界:绝不信任客户端输入来做出授权决策。
3) 依赖项与供应链安全(最高优先级)
如果 package.json / 锁文件发生变更,必须完成以下所有工作:
3.1 列出变更
- 列出每个新增/更新/移除的依赖项,包括名称 + from→to 版本,以及原因(如果 PR 中有说明)。
3.2 快速检查生态系统风险(批准前)
- 对每个变更的包:
- 检查近期维护者/所有权变更、可疑的发布节奏、已知安全公告/CVE、拼写仿冒风险。
- 如果环境支持,请运行类似以下命令:
npm view <pkg> time maintainers repository dist.tarball。
3.3 检查源码(node_modules)——风险非轻微时必须执行
- 检查依赖项的
node_modules/<pkg>/package.json和入口点(main/module/exports)。 - 搜索高风险行为(示例;可按需扩展):
- 出站/网络:
fetch(、axios、XMLHttpRequest、http、https、ws、request、net、dns - 动态执行:
eval、new Function、动态require、远程脚本加载 - 安装钩子:
postinstall、preinstall、install、二进制文件下载 - 特权访问:文件系统、剪贴板、keychain/keystore、环境变量
- 出站/网络:
- 将以下情况视为高风险,除非有合理解释且已隔离,否则阻止批准:
- 任何遥测/远程配置获取/意外的出站请求
- 任何动态执行或安装时脚本行为
- 任何对敏感存储或钱包相关数据的访问
3.4 React Native 原生层检查(RN 库必需)
- 对于 React Native 依赖(或任何包含原生绑定的包:
.podspec、ios/、android/、react-native.config.js、TurboModules/Fabric):- 检查 iOS/Android 原生源代码的安全性和性能。
- 确认没有意外的出站请求,没有未经明确产品意图授权的遥测/上传,也不会访问钱包机密/私钥/种子数据。
- 必要时,深入检查第三方原生依赖:
- iOS:CocoaPods /
Pods/源码、捆绑的框架、构建脚本 - Android:Gradle/Maven 制品、JNI/原生库、构建时任务
- iOS:CocoaPods /
- 除非有明确说明并进行了隔离,否则将任何隐藏的网络行为、动态加载、安装/构建脚本或混淆的原生代码视为高风险。
4) node_modules 发出站请求时必须明确指出
如果 node_modules 代码执行了任何出站网络/API 请求(直接或间接),必须在评审中明确指出:
- 确切调用位置(文件路径 + 函数)
- 目标地址(完整 URL/主机)
- 负载字段(发送的数据)
- 标头/认证信息(令牌/ Cookie/标识符)
- 触发条件(何时/如何运行)
- 跨平台影响(扩展/移动端/桌面端/Web)
4.1 扩展程序清单权限变更(最高优先级)
- 如果
manifest.json(permissions、host_permissions、optional_permissions)发生变更:- 将其作为首要评审项醒目地指出。
- 列出新增/移除的权限,并说明这些权限启用的新增能力。
- 评估最小权限原则:确认该权限确属必要、主机范围限制在最小范围内,且不会扩大数据访问/外泄路径。
- 重新检查权限变更引入的数据暴露面(网络、存储、消息传递、内容脚本、后台/服务工作线程)。
5) 跨平台架构评审(扩展程序/移动端/桌面端/Web)
以资深多平台架构师的视角评审实现:
- 该方案是否是兼顾可维护性/可测试性的最简单正确方案?
- 识别平台层面的陷阱:
- 扩展程序限制(MV3/服务工作线程生命周期、权限、CSP)
- RN 限制(WebView、原生模块、后台运行)
- 桌面端(Electron 安全边界、IPC、nodeIntegration)
- Web(CORS、存储、XSS、包体积、运行时差异)
- 如果方案并非最优,提出更好的替代方案并说明权衡。
6) React 性能(钩子 + 重渲染热点)
对于新增/修改的组件:
- 检查不稳定引用是否造成不必要的重渲染:
- 传递给子组件的内联对象/函数
- 错误的钩子依赖数组
- 状态层级过高,导致大量组件连带重渲染
- 验证记忆化策略(
memo、useMemo、useCallback)是否正确(无过期闭包/错误依赖)。 - 注意渲染中的高开销工作、列表渲染问题,以及缺少订阅/监听器清理的问题。
- 严格审查新增的父子组件边界,并指出可能的重渲染热点。
7) 评审输出格式(保持可执行性)
- 聚焦安全性/正确性/架构/性能。
- 避免纠结 UI 样式/注释等细节,除非它们会导致实际错误、安全风险或可衡量的性能退化。
- 按以下类别给出发现:
- 阻断项(必须修复)
- 高风险(强烈建议处理)
- 建议(可选优化)
- 问题(需要澄清)
附加资源
- 依赖项审计:reference/dependency-audit.md
- React 性能:reference/react-performance.md
- 跨平台检查:reference/cross-platform.md
- 文件分析模式:reference/file-analysis.md
8)架构可视化(必需)
生成 ASCII 图,说明 PR 对架构的影响。ASCII 图适合在终端中查看,无需外部工具。
8.1 文件依赖关系图
展示变更文件之间的关系:
┌─────────────────────┐ ┌─────────────────────┐
│ package.json │────▶│ yarn.lock │
└─────────────────────┘ └─────────────────────┘
│
▼
┌─────────────────────┐ ┌─────────────────────┐
│ native patch │────▶│ iOS/Android code │
└─────────────────────┘ └─────────────────────┘
8.2 数据流图
对于涉及数据处理的 PR:
User Input ──▶ Validation ──▶ Business Logic ──▶ API Call
│
UI Render ◀── State Update ◀──────────┘
8.3 组件层级结构
对于 UI 变更,展示组件之间的关系:
ParentComponent
├── ChildA (props: data, onSubmit)
│ ├── GrandchildA1
│ └── GrandchildA2
└── ChildB (props: config)
└── GrandchildB1
8.4 状态流
对于与状态相关的变更:
[*] ──▶ Idle ──fetchData()──▶ Loading
│
┌───────────────────────┼───────────────────────┐
│ │ │
▼ ▼ │
Success ──reset()──▶ Error ──retry()────────────┘
│ │
└───────dismiss()───────┘
│
▼
Idle
8.5 时序图
对于异步操作:
User Component Service API
│ │ │ │
│──click()─────▶│ │ │
│ │──callSvc()───▶│ │
│ │ │──POST /api───▶│
│ │ │◀──response────│
│ │◀──result──────│ │
│◀──update UI───│ │ │
8.6 跨平台影响
展示受影响的平台:
Changed Code: packages/shared/src/sentry/basicOptions.ts
Platform Impact:
┌───────────┬───────────┬───────────┬───────────┐
│ Extension │ Mobile │ Desktop │ Web │
├───────────┼───────────┼───────────┼───────────┤
│ ✓ │ ✓ │ ✓ │ ✓ │
└───────────┴───────────┴───────────┴───────────┘
Risk Level: [HIGH] [HIGH] [MEDIUM] [LOW]
图表指南
-
对于非简单 PR,始终至少生成 2 个图表:
- 文件依赖关系图(始终需要)
- 一个领域特定图表(数据流/组件层级结构/状态/时序)
-
使用方框绘制字符:
- 方框和表格使用
┌ ┐ └ ┘ │ ─ ├ ┤ ┬ ┴ ┼ - 箭头使用
▶ ◀ ▲ ▼ - 状态指示符使用
✓ ✗
- 方框和表格使用
-
突出风险区域:
- 使用
[HIGH][MEDIUM][LOW]标签 - 使用
🔐或⚠️标记安全关键路径
- 使用
-
让图表保持精简:
- 每个图表最多包含 10–15 个节点
- 将复杂流程拆分为多个图表
评论
支持 Markdown