大数据安全审查
审查完整数据路径,确保生产行为有界。报告基于证据的发现、已确认的安全路径、缺失的证据以及经过测试或未测试的边界。
操作规则
- 默认只读。不修改代码、依赖项、数据库、生产设置或外部系统。
- 不安装依赖项。
- 绝不将缺失的证据视为安全证明。将受影响的层标记为“未经验证”。
- 未经运行时、负载测试、查询计划或同等证据,不得声称支持某种规模。
- 将模式匹配视为候选,而非最终发现。在报告之前,先阅读周围的数据流。
- 优先使用用户作用域或当前差异。将发现、阅读、命令和输出范围控制在有界之内。
工作流程
1. 确定审查范围
阅读请求、仓库说明、指定文件、当前差异以及直接的生产者和消费者。说明已审查、已排除和缺失的层。
2. 构建规模档案
记录当前数据量、设计限制、请求频率、并发度、增长趋势、数据项大小、交互目标以及资源限制。如果某些值缺失,应在诊断假设中与已确认的值分开标注。
当用户证据缺失时,仅使用以下诊断探针:
- 10,000,000 存储行。
- 100,000 匹配行。
- 100 个并发交互请求。
- 页面大小 100,硬上限 200。
- 100,000 逻辑表行,且 DOM 行数有界。
- 1,000,000 导出或批处理行。
- 10 倍增长。
3. 跟踪数据路径
跟踪:
数据源 -> 查询/数据访问 -> 服务/任务 -> API/序列化 -> 状态管理 -> 页面/表格/导出
说明哪些层有证据支持。
4. 审查每一层
使用 references/review-checklist.md 进行跨栈审查。
仅当路径包含 Vue、axios、vxe-table、浏览器状态或数据密集型表格渲染时,加载 references/vue2-axios-vxe-table.md。
仅当路径包含 ASP.NET WebAPI、EF Core、LINQ、控制器、服务、仓库、导出或后台任务时,加载 references/dotnet-webapi-efcore.md。
默认不加载所有参考文献。
检查存储/查询范围、物化、投影、索引、稳定分页、负载大小、取消、超时、有界并发、背压、幂等性、重试、状态副本、计算工作量、DOM 大小、加载状态以及降级。
5. 验证候选发现
对于每个候选:
- 识别增长的输入或并发维度。
- 确认过滤、投影、分页、缓冲或渲染发生的位置。
- 检查现有的硬限制及其是否经过测试。
- 跟踪取消、超时、重试和错误传播。
- 当代码可用时,记录确切的文件及行号证据。
- 如果上下文证明路径是有界的,则拒绝该候选。
6. 对证据和严重性进行分类
证据状态:
- 已确认:直接的代码、SQL、配置、测试、运行时或设计证据。
- 很可能:路径证据很强,但缺少一个上游或下游的产物。
- 未经验证:必要材料不可用。
严重性:
- P0:在可达路径上确认存在数据损坏、生产不可用或不受控制的资源耗尽。
- P1:在已知或诊断规模下,很可能发生超时、OOM、数据库过载、严重的交互失败或错误结果。
- P2:随着容量或并发度的增长,出现有意义的性能降级,但存在当前裕量或替代路径。
- P3:缺少限制、可观测性、测试或可维护性证据,且未展示严重的失败。
不要仅根据诊断假设分配 P0 或 P1。将严重但缺乏支持的风险放在高优先级验证项下。
7. 编写报告
加载 references/output-contract.md 并严格遵循。
每个发现必须包括:
- 严重性和证据状态。
- 层及稳定的根因代码。
- 证据位置。
- 触发规模。
- 影响。
- 最低限度的修复方案。
- 验证方法。
仅在证据支持时才列出已确认的安全路径。
仓库和输出限制
- 最多枚举 100,000 条路径作为元数据;超过此数量时,按目录和扩展名缩小范围。
- 每次内容传递最多扫描 20,000 个源文件或 500 MiB 文本,以先到者为准。
- 最多保留 500 个候选匹配;其余的聚合记录并注明截断数量。
- 每次传递最多深入读取 200 个候选文件。
- 使用 60 秒的默认命令超时;超时后缩小范围。
- 每个根因最多展开 50 个发现和 5 个代表性的证据位置。
- 跳过依赖项、生成的输出、归档文件、二进制文件、构建目录和大型压缩文件。
- 报告每次排除和截断,注明原始数量、保留数量和原因。
缺失证据和失败情况
- 仅前端:审查前端,并生成一个“未经验证”的后端/API/数据库契约。
- 仅后端:审查后端,并将消费者渲染和交互标记为“未经验证”。
- 仓库过大:从差异、路由、客户端、查询、导出和渲染入口点缩小范围。
- 命令超时:减少批处理或路径范围,而不是反复增加超时。
- 文档与代码冲突:优先采用代码、测试、查询计划和运行时证据;报告文档偏差。
- 敏感材料:不重复密码或记录;使用脱敏的位置描述。