| name | safe-check |
| description | 发布前对应用程序进行全面审计,检查安全性、数据泄露、可靠性、并发状态完整性、可访问性和 UI 一致性。适用于上线、发布或交付前的安全检查。 |
| user-invocable | true |
Safe Check
对应用程序进行全面审计,涵盖安全性、可靠性、并发性、可访问性和 UI 一致性。
审查相关代码库、架构、数据流、API 交互、认证和授权逻辑、状态管理、异步操作、错误处理以及面向用户的界面。端到端追踪重要流程,而不是孤立审查文件。
这是发布前的安全检查,首要目标是防止数据泄露和越权访问。
具体调查
安全漏洞和数据暴露
- 认证和授权缺陷,包括缺少服务器端权限检查、权限提升、不安全的直接对象引用以及跨租户数据访问。
- 通过客户端代码、环境变量、API 响应、日志、分析、URL、本地存储、会话存储、Cookie、错误消息或源映射暴露的敏感信息。
- 注入风险,包括 SQL、命令、模板、提示、HTML 和脚本注入(适用时)。
- XSS、CSRF、SSRF、不安全重定向、不安全的文件上传、路径遍历、弱会话处理、不安全的令牌存储以及缺少安全边界。
- 过于宽松的数据库规则、API 端点、CORS 策略、存储桶、Webhook 处理程序或第三方集成。
- 可能被无意暴露的密钥、API 密钥、凭证、内部端点、个人数据或实现细节。
- 信任边界处缺少验证和清理。不要假设客户端验证就足够了。
竞态条件、并发性和状态完整性
- 由重复点击、重试、刷新或并发请求引起的重复提交。
- 非幂等操作,可能创建重复记录、支付、消息、预订、工作或副作用。
- 陈旧状态、乐观更新失败、丢失更新、冲突写入以及乱序异步响应。
- 未正确清理的效果、订阅、监听器、定时器和请求。
- 操作已在进行中但动作仍可用的 UI 状态。
- 缓存失效问题,以及客户端状态、服务器状态和持久化数据之间的不一致。
- 多标签页、多设备以及网络较差的场景(相关时)。
可靠性和故障处理
- 未处理的 Promise 拒绝、吞没错误、无声故障、无限加载状态、损坏的重试循环以及不完整的回滚行为。
- 缺少加载、空、错误、离线、超时和部分成功状态。
- 留下数据或 UI 不一致状态的故障路径。
- 关于 API 响应、可空性、排序、时序或网络可用性的假设,可能导致生产故障。
- 内存泄漏、不必要的重渲染、昂贵操作以及明显影响用户体验的性能瓶颈。
可访问性
- 语义化 HTML 以及地标、标题、标签、列表、表格、按钮和链接的正确使用。
- 键盘导航、逻辑 Tab 顺序、焦点可见性、焦点捕获以及焦点恢复。
- 缺少或不正确的可访问名称、标签、描述和 ARIA 属性。
- 颜色对比度、文本可读性、触摸目标大小、缩放行为、减少运动支持,以及仅依赖颜色传达含义。
- 屏幕阅读器对模态框、菜单、下拉菜单、标签页、Toast、验证错误、加载状态和动态更新内容的处理。
- 表单具有不清晰的说明、不良验证、缺少自动完成属性或糟糕的错误恢复。
- 在适用时,对照 WCAG 2.2 AA 期望进行测试。
视觉和交互一致性
- 不一致的间距、排版、颜色使用、边框半径、阴影、图标大小、对齐、组件尺寸以及响应式行为。
- 视觉上看起来相同但行为不同的组件,或行为相同但实现不一致的组件。
审计要求
- 先识别系统入口、信任边界、数据分类、身份模型和关键资产,再开始逐项检查。
- 对登录、授权、敏感数据读写、文件处理、支付或其他高风险流程进行端到端追踪,覆盖客户端、API、服务端和持久化层。
- 不把静态扫描结果直接当作已确认漏洞;检查调用上下文、运行时约束和现有防护后再下结论。
- 优先报告可能导致数据泄露、跨租户访问、权限提升、凭证暴露或不可逆副作用的问题。
- 除非用户明确要求修复,否则只进行审计并输出报告,不修改应用代码。
- 不执行破坏性利用,不访问无授权数据,不在报告中复述完整密钥、令牌、Cookie、个人数据或其他敏感值;证据必须脱敏。
输出格式
按严重程度从高到低列出发现:Critical、High、Medium、Low、Informational。每项发现必须包含:
- 标题和类别。
- 状态:
✅ 已确认、⚠️ 存疑 或 ❌ 已排除。
- 受影响的文件和行号,或明确的运行时入口。
- 端到端攻击路径、故障路径或复现步骤。
- 影响范围,包括受影响的数据、用户、租户和操作。
- 现有防护及其不足。
- 最小修复建议,以及验证修复所需的测试。
报告末尾总结:
- 是否存在阻止发布的问题。
- 数据泄露风险和授权风险是否已覆盖。
- 尚未验证的盲点及其原因。
- 发布前必须完成的修复清单和建议的回归验证。
没有发现问题时,明确说明审计范围和未覆盖区域;不要把“未发现”表述为“绝对安全”。