| name | dart-security-review |
| description | Performs security review for Flutter/Dart code. Use when implementing authentication, handling user input, working with API keys or secrets, managing permissions, storing sensitive data locally, or integrating third-party APIs. Provides Flutter-specific security checklists and patterns. |
Security Review(Flutter/Dart)
Flutter/Dart 專案的安全審查快速指引。本 Skill 提供安全檢查清單和核心原則,詳細程式碼範例請參考 references/flutter-security-patterns.md。
適用場景
- 實作認證或授權功能
- 處理使用者輸入(表單、掃描結果)
- 使用 API Key 或其他機密
- 整合第三方 API(Google Books、Dio 等)
- 儲存或傳輸敏感資料
- 管理裝置權限(相機、儲存)
- 準備 Release 建置或上架
1. 機密管理
原則:機密不可出現在原始碼或版本控制中。
檢查清單
核心模式
// 正確:建置時注入
const apiKey = String.fromEnvironment('API_KEY', defaultValue: '');
// 錯誤:硬編碼
const apiKey = 'sk-proj-xxxxx'; // 禁止
詳細範例:references/flutter-security-patterns.md 第 1 節
2. 輸入驗證
原則:所有使用者輸入在處理前必須驗證和清理。
檢查清單
核心模式
// 表單驗證
TextFormField(
validator: (value) {
if (value == null || value.trim().isEmpty) return '必填';
if (value.length > maxLength) return '超過長度限制';
return null;
},
inputFormatters: [
FilteringTextInputFormatter.deny(RegExp(r'[<>{}]')),
],
)
詳細範例:references/flutter-security-patterns.md 第 2 節
3. 本地資料安全
原則:敏感資料使用加密儲存,一般偏好設定可用明文。
檢查清單
核心模式
// 正確:參數化查詢
await db.rawQuery('SELECT * FROM books WHERE title LIKE ?', ['%$query%']);
// 錯誤:字串拼接(SQL 注入)
await db.rawQuery("SELECT * FROM books WHERE title LIKE '%$query%'");
儲存選擇指引
| 資料類型 | 儲存方式 |
|---|
| Token、密碼、API Key | flutter_secure_storage |
| 使用者偏好(主題、語言) | SharedPreferences |
| 結構化業務資料 | sqflite(參數化查詢) |
| 暫存檔案 | path_provider 暫存目錄 |
詳細範例:references/flutter-security-patterns.md 第 3 節
4. 網路安全
原則:所有網路通訊使用 HTTPS,驗證回應結構。
檢查清單
核心模式
// Dio 安全配置
final dio = Dio(BaseOptions(
baseUrl: 'https://api.example.com', // HTTPS only
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 15),
));
// 攔截器注入 Token
dio.interceptors.add(InterceptorsWrapper(
onRequest: (options, handler) async {
final token = await storage.readToken();
if (token != null) {
options.headers['Authorization'] = 'Bearer $token';
}
handler.next(options);
},
));
詳細範例:references/flutter-security-patterns.md 第 4 節
5. 權限管理
原則:僅請求必要權限,在需要時才請求,並說明用途。
檢查清單
核心模式
// 按需請求,處理各種狀態
Future<bool> requestCameraPermission() async {
final status = await Permission.camera.status;
if (status.isGranted) return true;
if (status.isDenied) {
final result = await Permission.camera.request();
return result.isGranted;
}
if (status.isPermanentlyDenied) {
await openAppSettings();
return false;
}
return false;
}
詳細範例:references/flutter-security-patterns.md 第 5 節
6. 認證與授權
原則:Token 安全儲存,過期自動處理,敏感操作前驗證狀態。
檢查清單
詳細範例:references/flutter-security-patterns.md 第 6 節
7. 依賴安全
原則:定期檢查依賴漏洞,鎖定版本確保可重現建置。
檢查清單
核心指令
flutter pub audit
flutter pub outdated
flutter pub upgrade
詳細範例:references/flutter-security-patterns.md 第 7 節
8. 敏感資料外洩防護
原則:日誌不含敏感資料,錯誤訊息不洩漏技術細節。
檢查清單
核心模式
// 正確:Release 模式下不輸出日誌
if (kDebugMode) {
debugPrint('API Error: ${error.runtimeType}');
}
// 正確:使用 ErrorHandler 轉換錯誤訊息
final userMessage = ErrorHandler.getUserMessage(exception);
// 錯誤:直接暴露技術細節
// showError('Database error: $sqlException at line 42');
詳細範例:references/flutter-security-patterns.md 第 8 節
上架前安全檢查清單
Release 建置或上架前,逐項確認:
參考資源
Last Updated: 2026-03-02
Version: 1.0.0