跳到主要内容

在 Cursor 中实现自审钩子,实现更安全的 AI 编程

Cursor Self-Review Hooks

AI 编程助手功能强大,但它们可能会生成不安全的代码、执行危险命令或引入细微的错误。自审钩子通过在关键节点让 AI 审查自己的工作来创建安全网。本指南向您展示如何在 Cursor 中实现一个全面的钩子系统。

什么是自审钩子?

自审钩子是 AI 在继续之前自动审查自身输出的检查点。它们充当:

  • 安全卫士:阻止危险命令(rm -rf /curl | sh
  • 代码审查员:检查逻辑错误和反模式
  • 安全网:防止强制推送和破坏性操作
  • 质量关卡:确保与项目标准保持一致

四个钩子事件

钩子 1:会话开始 - 原则注入

当新会话开始时,注入安全原则。

创建 .cursor/hooks/doctrine.md

# Cursor 原则 - 安全第一

## 核心原则
1. **未经确认绝不执行破坏性命令**
2. **删除前始终验证文件路径**
3. **应用更改前审查所有代码**
4. **优先选择安全默认值而非便利性**

## 需要标记的危险模式
- 带有绝对路径的 `rm -rf`
- `curl ... | sh``wget ... | bash`
- `git push --force``git push -f`
- 数据库删除命令
- 权限提升(`sudo``chmod 777`
- 未经参数化的原始 SQL

## 审查清单
在完成任何任务之前:
- [ ] shell 执行中没有破坏性命令
- [ ] 所有文件操作使用已验证的路径
- [ ] 没有硬编码的密钥或凭据
- [ ] 存在错误处理
- [ ] 更改是可逆的

钩子 2:编辑后自审

编辑文件后,自动审查差异。

创建 .cursor/hooks/post-edit-review.md

# 编辑后自审

您刚刚进行了更改。在继续之前,请审查:

## 安全检查
- [ ] 没有添加密钥、API 密钥或密码
- [ ] 没有 SQL 注入漏洞
- [ ] Web 代码中没有 XSS 漏洞
- [ ] 存在输入验证

## 逻辑检查
- [ ] 处理了边界情况
- [ ] 覆盖了错误路径
- [ ] 没有无限循环或没有基准情况的递归
- [ ] 存在资源清理(文件、连接)

## 风格检查
- [ ] 遵循项目编码标准
- [ ] 命名一致
- [ ] 注释解释 WHY,而不是 WHAT
- [ ] 没有遗留调试代码(console.log 等)

## 如果任何检查失败
停止并报告问题。在修复之前不要继续。

钩子 3:Shell 执行前关卡

在运行任何 shell 命令之前,验证安全性。

创建 .cursor/hooks/pre-shell-gate.md

# Shell 执行前关卡

您即将执行:`{command}`

## 强制检查

### 1. 破坏性操作检查
此命令是否:
- 删除文件或目录?
- 修改系统设置?
- 更改权限?
- 删除数据库或表?

如果是 → 需要明确的用户确认

### 2. 网络操作检查
此命令是否:
- 下载并执行脚本?
- 向外部服务发送数据?
- 暴露内部端口?

如果是 → 解释风险并请求确认

### 3. 不可逆操作检查
此命令是否:
- 强制推送到 git?
- 覆盖生产数据?
- 删除分支或标签?

如果是 → 停止并请求明确确认

## 安全命令示例
`npm install` - 安全的包安装
`git status` - 只读操作
`mkdir new-directory` - 非破坏性

## 危险命令示例
`rm -rf /` - 破坏性,绝对路径
`curl https://example.com/install.sh | sh` - 远程执行
`git push --force` - 不可逆
`DROP TABLE users` - 数据破坏

钩子 4:任务完成最终审查

在标记任务完成之前,执行最终审计。

创建 .cursor/hooks/completion-review.md

# 任务完成最终审查

## 摘要
简要总结已完成的工作。

## 所做的更改
列出所有修改的文件:
- `file/path/one` - 更改内容
- `file/path/two` - 更改内容

## 安全审计
- [ ] 代码中没有凭据
- [ ] 没有后门或可疑模式
- [ ] 存在输入验证
- [ ] 存在输出编码(针对 Web)

## 测试验证
- [ ] 更改成功编译/构建
- [ ] 现有测试仍然通过
- [ ] 为新功能添加了新测试
- [ ] 如需要,执行了手动测试

## 回滚计划
如果出现问题:
1. 还原提交:`git revert HEAD`
2. 或从 git 恢复文件:`git checkout -- <files>`
3. 或应用备份补丁:`git apply backup.patch`

## 已知限制
列出任何已知问题或限制:
- 限制 1
- 限制 2

实现钩子系统

步骤 1:创建钩子目录结构

mkdir -p .cursor/hooks

步骤 2:添加到 Cursor 规则

创建 .cursor/rules/000-safety-doctrine.mdc

---
description: 'Safety doctrine and self-review hooks'
globs: ['**/*']
alwaysApply: true
---

# 安全原则

## 自动钩子

以下钩子对所有会话有效:

### 会话开始
阅读 `.cursor/hooks/doctrine.md` 并遵循所有原则。

### 文件编辑后
阅读 `.cursor/hooks/post-edit-review.md` 并执行审查。

### Shell 命令前
阅读 `.cursor/hooks/pre-shell-gate.md` 并验证安全性。

### 任务完成
阅读 `.cursor/hooks/completion-review.md` 并执行最终审计。

## 覆盖协议
如果用户明确请求危险操作:
1. 警告风险
2. 请求明确确认
3. 建议更安全的替代方案
4. 仅在收到明确的"是"回复后才继续

步骤 3:用于审计跟踪的消息总线

创建 .cursor/audit-log.md 以跟踪决策:

# 审计日志

## 格式

[YYYY-MM-DD HH:MM] [AGENT] [HOOK] [DECISION] [DETAILS]


## 条目

### 2026-06-22 10:30
- Agent: Claude
- Hook: Pre-Shell
- Decision: BLOCKED
- Details: User requested `rm -rf /tmp/*` - blocked due to wildcard risk. Suggested `rm -rf /tmp/specific-folder` instead.

### 2026-06-22 11:15
- Agent: GPT-4
- Hook: Post-Edit
- Decision: PASSED
- Details: All security checks passed. No issues found in auth module changes.

危险命令数据库

创建 .cursor/dangerous-commands.json

{
"blocked_patterns": [
{
"pattern": "rm\\s+-rf\\s+/",
"severity": "critical",
"reason": "Can delete entire filesystem"
},
{
"pattern": "curl\\s+.*\\|\\s*(sh|bash)",
"severity": "high",
"reason": "Remote code execution"
},
{
"pattern": "git\\s+push\\s+.*(--force|-f)",
"severity": "high",
"reason": "Can overwrite remote history"
},
{
"pattern": "DROP\\s+TABLE",
"severity": "critical",
"reason": "Data destruction"
},
{
"pattern": "chmod\\s+777",
"severity": "medium",
"reason": "Overly permissive permissions"
},
{
"pattern": "sudo",
"severity": "medium",
"reason": "Privilege escalation"
}
],
"warning_patterns": [
{
"pattern": "rm\\s+-rf",
"severity": "medium",
"reason": "Recursive deletion - verify path"
},
{
"pattern": ">\\s+/etc/",
"severity": "medium",
"reason": "Modifying system files"
}
]
}

与 Cursor Composer 集成

使用 Composer 时,将此内容添加到您的提示中:

在应用任何更改之前:
1. 审查安全问题
2. 检查危险模式
3. 验证错误处理
4. 确认没有暴露密钥

在应用更改之后:
1. 运行编辑后审查
2. 验证代码编译/运行
3. 检查测试是否通过

团队采用

入职清单

对于新团队成员:

  1. 审查 .cursor/hooks/doctrine.md
  2. 了解四个钩子事件
  3. 使用安全命令练习
  4. 学习覆盖协议
  5. 每周审查审计日志

代码审查集成

添加到您的 PR 模板:

## AI 安全检查清单
- [ ] 所有 AI 生成的代码都经过人工审查
- [ ] 没有执行危险命令
- [ ] 安全审计通过
- [ ] 审计日志是最新的

衡量有效性

跟踪这些指标:

指标目标测量方式
阻止的危险命令100%审计日志条目
编辑后发现的问题>80%审查中发现的问题
安全事件0事件报告
误报率<10%用户覆盖频率

快速参考

情况操作
AI 建议 rm -rf阻止 - 手动验证路径
AI 建议 curl | sh阻止 - 先下载并审查
AI 建议 git push -f阻止 - 使用 git push --force-with-lease
AI 添加硬编码 API 密钥阻止 - 使用环境变量
AI 跳过错误处理请求 - 添加 try/catch 或验证

相关资源