SuperAPI AI 工具集

pdpa-security-audit

安全与审计

查看项目

更新于 10-15 08:42

技能介绍

PDPA Security Audit 是一个安全审计技能,用于对任意代码库执行映射到 PDPA 2024(马来西亚)和 OWASP Top 10(2021)的全面安全审计。该技能面向可能没有接受过正式安全培训、但需要交付合规生产代码的开发者。

何时使用

  • 上线/生产部署之前
  • 当被问及“我的代码安全吗?”时
  • 当被问及 PDPA 合规时
  • 当被要求执行安全审计时
  • 当被问及 OWASP 时
  • 在涉及认证、支付或用户数据的大型功能新增之后

审计流程

第一阶段:取证发现检查(PDPA 2024)

对照来自真实马来西亚法院案例的全部 8 项发现检查代码库:

发现 1:SQL 注入 搜索:

  • Laravel 中带字符串拼接的 DB::raw()、whereRaw()、orderByRaw()
  • Node.js 中 SQL 查询里的模板字面量或字符串拼接
  • 任何未使用参数化绑定/预处理语句的查询
  • 缺少 ? 占位符或 $1 参数

通过标准:100% 的数据库查询使用参数化绑定。

发现 2:路径遍历 搜索:

  • 接受用户可控路径的文件下载端点
  • 使用用户输入的 fs.readFile、readFileSync、createReadStream
  • 缺少 path.basename() 或路径清理
  • 将用户输入与文件系统路径直接拼接

通过标准:服务端代码中无用户可控文件路径,或所有路径均经 basename/白名单清理。

发现 3:竞态条件 搜索:

  • 先检查后操作模式(先 SELECT 再 UPDATE/INSERT)
  • 缺少幂等保护的支付/webhook 处理器
  • 没有原子条件更新的信用/余额操作
  • 缺少数据库事务或批量操作

通过标准:所有财务操作使用原子模式(条件 UPDATE、INSERT OR IGNORE + UNIQUE 或数据库事务)。

发现 4:硬编码密钥 搜索:

  • 直接写在源代码中的 API 密钥、密码、令牌
  • 提交到 git 的 .env 文件
  • git 历史中的密钥
  • 检查 .gitignore 是否覆盖 .env* 文件

通过标准:源代码中零密钥。所有密钥通过环境变量或密钥管理器提供。

发现 5:审计日志 检查:

  • 所有敏感操作的结构化日志
  • 所有交易记录的时间戳
  • 安全事件日志(认证失败、被拒请求、速率限制)
  • 日志持久化(不只是临时的 console.log)

通过标准:所有敏感操作产生带时间戳的可追踪审计条目。

发现 6:上线前测试 检查:

  • 测试套件存在且通过
  • CI/CD 流水线以测试通过为部署门禁
  • 安全专项测试(认证边界、输入验证)
  • CI 中的依赖漏洞扫描

通过标准:测试存在、在 CI 中运行,并在失败时阻止部署。

发现 7:依赖安全 检查:

  • 可疑或仿冒(typosquatting)的包名
  • 来源不明的包
  • 缺少锁文件
  • 恶意 postinstall 脚本
  • 无锁文件的未固定版本

通过标准:所有依赖均为知名包,锁文件存在,无可疑包。

发现 8:许可证合规 检查:

  • 未合规即复制到源码中的 GPL 许可代码
  • 被移除的版权声明
  • 项目存在许可证文件
  • node_modules 未被提交

通过标准:项目有许可证,无未合规复制的 GPL 代码,版权声明保留。

第二阶段:OWASP Top 10 评估

对每个类别检查控制措施并识别缺口:

类别 关键检查
A01 访问控制失效 所有受保护路由有认证、RBAC/ABAC、租户范围数据、无 IDOR
A02 加密失败 强制 HTTPS、密钥仅服务端、静态 PII 加密、时序安全比较
A03 注入 参数化查询、模式验证、无命令执行、配置 CSP
A04 不安全设计 速率限制、幂等性、原子事务、输入验证
A05 安全配置错误 安全响应头、无调试模式、净化错误、无 CORS 通配符
A06 易受攻击组件 依赖审计通过、锁文件存在、检查仿冒、跟踪已知 CVE
A07 认证失败 密码哈希、会话管理、防暴力破解、速率限制
A08 数据完整性 CI 门禁(SAST、密钥扫描)、webhook 签名验证
A09 日志与监控 结构化审计日志、防篡改存储、告警
A10 SSRF 无原始用户可控的服务端 fetch、阻止私有 IP/元数据、重定向验证

阶段 2.5:企业修复路由

生成修复清单时,将每项发现映射到对应的专项修复技能:

发现 路由到
访问控制失效、IDOR、租户泄漏、管理员暴露 $access-control-patterns
SQL 注入、原始查询、不安全 DB 调用 $sql-injection-prevention
XSS、路径遍历、命令注入、不安全文件上传 $input-validation
硬编码密钥、提交的 .env、密钥轮换 $secrets-management
缺少 CSP/HSTS/点击劫持响应头 $security-headers
弱密码、JWT 误用、会话固定、暴力破解 $auth-hardening
CORS 通配符、凭证泄漏、不安全预检 $cors-configuration
明文 PII、缺少加密、弱密钥管理 $data-encryption
堆栈跟踪泄漏、生产环境详细错误 $error-handling-security
缺少审计追踪或非持久日志 $audit-logging-workers
Webhook 重放、竞态条件、缺少幂等性 $webhook-security
缺少 SAST、密钥扫描、依赖门禁 $ci-security-gates
缺少 API 滥用限制或暴力破解限制 $rate-limiting
SSRF、用户可控 URL、元数据端点暴露 $ssrf-prevention
仿冒、恶意包、缺少锁文件 $dependency-lockfile-audit

第三阶段:输出

产出评分卡:

## PDPA Forensic Findings

| # | Finding | Status | Evidence |
|---|---------|--------|----------|
| 1 | SQL Injection | PASS/FAIL | [file:line] |
| 2 | Path Traversal | PASS/FAIL | [file:line] |
| 3 | Race Conditions | PASS/FAIL | [file:line] |
| 4 | Hardcoded Secrets | PASS/FAIL | [file:line] |
| 5 | Audit Logging | PASS/FAIL | [file:line] |
| 6 | Testing | PASS/FAIL | [file:line] |
| 7 | Dependencies | PASS/FAIL | [file:line] |
| 8 | License | PASS/FAIL | [file:line] |

## OWASP Top 10

| Category | Rating | Key Finding |
|----------|--------|-------------|
| A01-A10 | Strong/Good/Weak | ... |

## Priority Fixes

1. [最高风险项优先]
2. ...

法律参考

  • PDPA 2010(Pindaan 2024)Seksyen 5(1)(2):Denda sehingga RM1,000,000 atau penjara sehingga 3 tahun
  • Akta Hak Cipta 1987 Seksyen 41(1)(i):Denda RM2,000-RM20,000 per fail atau penjara 5 tahun
  • Akta Kontrak 1950 Seksyen 74:Ganti rugi am dan khas
  • Kanun Keseksaan Seksyen 417/419:Penjara 5-7 tahun(penipuan)

重要说明

  • 这是自动化内部评估,不能替代外部渗透测试
  • 对于企业/政府合同,应聘请 CREST 认证的外部渗透测试
  • 安全是持续维护,不是一次性任务——在重大变更后应重新运行此审计

适用场景

适用于准备上线或生产部署前的代码安全审查、需要了解代码是否安全的场景、PDPA 合规咨询、OWASP 相关审计需求,以及涉及认证、支付或用户数据的大型功能新增之后的安全复查。

限制

资料明确说明这是自动化内部评估,不能替代外部渗透测试;对于企业或政府合同,需另行聘请 CREST 认证的外部渗透测试。该技能需要重新运行,安全被视为持续维护而非一次性任务。