| name | security |
| description | Security best practices for Adepthood's FastAPI + React Native stack. Use when handling user input, API keys, JWT tokens, database queries, CORS configuration, or preparing for production deployment. Covers OWASP Top 10, secrets management, and deployment hardening. |
| metadata | {"author":"Geoff","version":"1.0.0"} |
Security
Defense in depth, least privilege, fail securely, never trust user input.
Instructions
Principles
- Defense in depth — multiple layers of security
- Least privilege — minimal access required
- Fail securely — errors don't expose sensitive data
- Input validation at all boundaries
- Never trust user input
- Secure by default, not by configuration
Pre-Launch Security Checklist
Authentication & Authorization:
Input Validation:
API Security:
Secrets Management:
Dependencies:
Database:
User API Key Handling
When users provide their own LLM API keys:
- Never store keys server-side (keep in client SecureStore/localStorage)
- Pass via request header (
X-LLM-API-Key), not in URL or body
- Never log the key value
- Never return the key in API responses
- Validate key format before forwarding to LLM provider
- Clear from memory after use
Examples
Safe Secret Handling
logger.info(f"Using API key: {api_key}")
logger.info("LLM request initiated for user %s", user_id)
Safe Error Response
raise HTTPException(status_code=500, detail=str(exc))
logger.exception("Database error in endpoint X")
raise HTTPException(status_code=500, detail="internal_error")
Troubleshooting
Error: detect-secrets flags false positives
- Add to
.secrets.baseline with detect-secrets scan --baseline .secrets.baseline
- Use
# pragma: allowlist secret for test fixtures only
Error: pip-audit finds vulnerability in transitive dependency
- Check if it's exploitable in your usage
- Pin a safe version or add to
.pip-audit-known-vulnerabilities
- Document the decision