用途
Static Security 用于对 Flutter 移动应用和 Dart 代码进行静态安全审查。Flutter 会把所有 Dart 代码直接编译进一个运行在不受信任设备上的二进制文件,因此本技能聚焦于通过阅读源码即可发现的安全问题,不包含渗透测试或运行时分析。审查基准来自 VGV 的《Security in Mobile Apps》指南与 OWASP Mobile Top 10。
主要能力
技能覆盖以下静态可检测的安全主题,并给出正反例代码:
- 密钥与 API Key:源码或打包配置文件中的硬编码凭据可被逆向提取,必须由后端服务在运行时下发;google-services.json、.env、*.plist、AndroidManifest.xml、Info.plist 等文件也在检查范围内。
- 安全数据存储:写入设备的敏感数据必须加密,使用 package:flutter_secure_storage(底层为 iOS Keychain / Android Keystore);SharedPreferences 为明文,仅可用于主题、语言、引导状态等非敏感偏好。
- 网络安全:前后端通信必须加密传输,使用 HTTPS 基地址;禁用证书校验(badCertificateCallback)会带来 MITM 风险;处理认证、支付或个人数据的端点建议实现证书固定(package:http_certificate_pinning)。
- 认证:认证控制须在服务端强制,客户端检查(widget 或路由)只是 UI 便利;生物识别使用 package:local_auth,而非自建 MethodChannel;凭据管理使用 Firebase Authentication 或 Auth0,不自行构建认证流程。
- 加密:使用经过同行评审的包,不自行实现加密;安全敏感随机数使用 Random.secure(),而非 dart:math 的 Random();避免 MD5、SHA-1、DES、RC4、ECB,优先 SHA-256+、AES-GCM、SHA-512-crypt。
- 输入校验:所有用户输入在到达仓库或 API 前须校验,使用 package:formz 为每个字段定义 FormzInput 子类,提交值从 state 读取而非 TextEditingController。
- 日志与错误暴露:print()、log()、debugPrint() 输出在设备上和崩溃上报工具中可读,不得记录令牌、密码、完整用户对象、HTTP 请求头或 PII;异常信息须脱敏后再呈现到 UI。
- 依赖漏洞:第三方包会编译进应用二进制,建议在每次发布前按顺序运行 dart pub get、osv-scanner --lockfile=pubspec.lock、dart pub outdated;扫描对象是 pubspec.lock 而非 pubspec.yaml;pubspec.yaml 中每条 ignored_advisories 都须在同一行附上注释说明理由。
使用方式
该技能以安全审查规范的形式提供判断标准、分级方案与代码示例。核心标准要求:绝不硬编码密钥;--dart-define、String.fromEnvironment、.env、原生配置文件、混淆常量或拆分字符串都不构成修复,唯一补救是从后端运行时获取;敏感本地数据用 flutter_secure_storage;网络走 HTTPS 且不关闭证书校验(仅本地开发测试服务器例外);安全随机用 Random.secure();用成熟加密包;认证在仓库层强制;日志不含敏感数据;依赖无已知漏洞且不无理由压制安全公告;设置 android:allowBackup="false";每个发现标注 Critical / Warning / Note。
技能给出严重性分级:Critical 如硬编码 API Key 或令牌、badCertificateCallback 绕过、JWT 存于 SharedPreferences、日志含敏感数据;Warning 如认证端点缺少证书固定、会话 ID 使用 Random()、API 调用前缺少 formz 校验、android:allowBackup="true";Note 如缺少 Dart 混淆、dart pub outdated 显示可用补丁、权限过宽的低 pub 分传递依赖。报告不得改用 High/Medium/Low 或 CVSS 等其他方案。
技能还要求在开发者提出被禁止的实现时,在同一回复中写出安全实现,用一两行说明规则,而不是给出被禁实现加警告,也不要停在“是否要我改成安全方式”的询问上;若开发者了解风险后仍坚持,则说明残余风险后继续。
适用场景
适用于 Flutter / Dart 代码库的安全代码审查、发布前检查,以及开发者请求实现可能违反上述标准的代码时提供安全替代方案。
限制
仅覆盖源码可发现的静态问题,不包含渗透测试或运行时分析。具体定价、平台支持细节与效果数据暂未提供。