mcpField
P
pr-review

pr-review

github.com/onekeyhq安全2.5k62 次安装1 天前更新
代码仓库

关于 pr-review

用于安全代码审查的技能,规定了相对于分支 x 检查变更的流程,优先关注安全性、正确性和架构,并要求逐文件分析及架构图。

主要功能

  1. 01基于 x 确定 PR 差异范围
  2. 02逐文件变更与风险分析
  3. 03检查机密信息和授权
  4. 04依赖项及平台安全审查
  5. 05结构化审查结果与图示

适用场景

  1. 01审查涉及安全敏感内容的代码变更
  2. 02评估依赖项和 manifest 更新
  3. 03生成可执行的 PR 审查报告

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/onekeyhq/app-monorepo --skill pr-review

安装后在 Claude Code 中输入/pr-review确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

reference/
cross-platform.md
dependency-audit.md
file-analysis.md
react-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/原生库、构建时任务
    • 除非有明确说明并进行了隔离,否则将任何隐藏的网络行为、动态加载、安装/构建脚本或混淆的原生代码视为高风险。

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 样式/注释等细节,除非它们会导致实际错误、安全风险或可衡量的性能退化。
  • 按以下类别给出发现:
    • 阻断项(必须修复)
    • 高风险(强烈建议处理)
    • 建议(可选优化)
    • 问题(需要澄清)

附加资源

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]
图表指南
  1. 对于非简单 PR,始终至少生成 2 个图表:

    • 文件依赖关系图(始终需要)
    • 一个领域特定图表(数据流/组件层级结构/状态/时序)
  2. 使用方框绘制字符:

    • 方框和表格使用 ┌ ┐ └ ┘ │ ─ ├ ┤ ┬ ┴ ┼
    • 箭头使用 ▶ ◀ ▲ ▼
    • 状态指示符使用 ✓ ✗
  3. 突出风险区域:

    • 使用 [HIGH] [MEDIUM] [LOW] 标签
    • 使用 🔐 或 ⚠️ 标记安全关键路径
  4. 让图表保持精简:

    • 每个图表最多包含 10–15 个节点
    • 将复杂流程拆分为多个图表

评论

支持 Markdown