static-security

Featured

Static security review for Flutter mobile apps and Dart code, flagging hardcoded secrets, insecure storage, unsafe network calls, leaky logs, and vulnerable dependencies. Use when reviewing or writing code that handles secrets, user data, network communication, authentication, or cryptography, or when adding validation to user input such as login, sign-up, or payment forms whose values reach a repository or an API, with prompts like "add validation to this form", "nothing is checked before this hits the API", or "validate these fields". Also use for dependency vulnerability review, a security audit even when the request never says "security": "we cut a release tomorrow, is this pubspec safe", "check our dependencies for known vulnerabilities", "scan for CVEs", "we have an ignored_advisories entry, is that fine", or "these versions are pinned, what are we exposed to".

AI & Automation 161 stars 22 forks Updated yesterday MIT

Install

View on GitHub

Quality Score: 90/100

Stars 20%
74
Recency 20%
100
Frontmatter 20%
70
Documentation 15%
100
Issue Health 10%
50
License 10%
100
Description 5%
100

Skill Content

# Security Flutter apps compile all Dart code directly into a binary that runs on untrusted devices. This skill covers static security review for Flutter/Dart codebases, anchored to the [VGV Security in Mobile Apps](https://engineering.verygood.ventures/general-practices/security_in_mobile_apps/) guide and the [OWASP Mobile Top 10](https://owasp.org/www-project-mobile-top-10/). Every finding in this skill is something detectable by reading source code — no pen-testing or runtime analysis. ## Core Standards Apply these standards to ALL Flutter security work: - **Never hardcode secrets** — API keys, tokens, and passwords in source code or config files are compiled into the binary and extractable via reverse engineering; serve them from a backend service - **`--dart-define` is not a fix for a hardcoded secret** — neither is `String.fromEnvironment`, a `.env` file, a native config file, an obfuscated constant, or a split-up string. Every one of them still ships the value inside the binary in recoverable form, so moving a key into one is the same finding in a new location. The only remediation is fetching it from a backend at runtime - **Use `package:flutter_secure_storage` for sensitive on-device data** — `SharedPreferences` is plaintext and unencrypted; never store tokens, PII, or session data there - **All network calls over HTTPS** — plain HTTP transmits data in cleartext; never disable certificate validation (the only exception is during development with a local test serv...

Details

Author
VeryGoodOpenSource
Repository
VeryGoodOpenSource/vgv-ai-flutter-plugin
Created
6 months ago
Last Updated
yesterday
Language
Shell
License
MIT

Bundled in these plugins

Similar Skills

Semantically similar based on skill content — not just same category