Verify BEFORE deploying any project.
- User inputs sanitized (HTML, SQL, shell)
- Type and range validation on API endpoints
- File uploads: verify MIME type, max size, safe filename
- URLs: validate scheme (no javascript:, data:)
- No hardcoded credentials in code
- .env in .gitignore
- API keys in environment variables or secrets manager
- Tokens with minimum necessary permissions (least privilege)
- Secrets rotated if ever exposed
- Parameterized queries (never string interpolation)
- RLS enabled on tables with user data (Supabase)
- Backups configured
- Connections with TLS
- Auth on all endpoints that require it
- Tokens with expiration
- Rate limiting on login and public endpoints
- CORS configured (no wildcard * in production)
- HTTPS in production
- Security headers (HSTS, X-Content-Type-Options, etc.)
- Errors don't expose stack traces or internal info to user
- Timeouts configured on external requests
- Logs don't contain passwords, tokens, or PII
- Critical errors alert (not just log)
- Health checks on critical services
- No known vulnerabilities (
npm audit,pip audit) - Pinned versions (no latest/*)
- Lock files (package-lock.json, poetry.lock) committed
- Don't run as root inside the container
- .dockerignore includes .env, .git, node_modules
- Base images with specific version (not :latest)
- Secrets NOT in build args or layers
Claude Code supports 6 permission modes that control when operations require confirmation:
- default: prompt on every potentially destructive operation
- acceptEdits: auto-accept file edits, prompt on destructive operations
- plan: read-only enforcement, no write/bash/agent operations
- auto (YOLO): minimal prompts, broad allow rules — see stripping rules below
- dontAsk: rarely used; disable prompts entirely (dangerous)
- bypassPermissions: skip all permission checks (local dev only)
- Verify auto-mode stripping rules: broad interpreter patterns (python, python3, node, etc.), package runners (npx, npm run, yarn run, etc.), and shell patterns (bash, sh, zsh, eval, etc.) are SILENTLY REMOVED when auto mode activates
- Replace interpreter allow patterns with specific tool commands: use
pytestinstead ofpython,uvicorninstead ofpython,vitest/jestinstead ofnode - Document which permissions are stripped in auto-mode for team awareness
- Test critical workflows with auto-mode enabled to verify they still work
Verificar ANTES de deployar cualquier proyecto.
- Inputs del usuario sanitizados (HTML, SQL, shell)
- Validación de tipos y rangos en API endpoints
- File uploads: verificar tipo MIME, tamaño máximo, nombre seguro
- URLs: validar scheme (no javascript:, data:)
- Sin credenciales hardcodeadas en código
- .env en .gitignore
- API keys en variables de entorno o secrets manager
- Tokens con permisos mínimos necesarios (least privilege)
- Secrets rotados si fueron expuestos alguna vez
- Queries parametrizadas (nunca string interpolation)
- RLS habilitado en tablas con datos de usuario (Supabase)
- Backups configurados
- Conexiones con TLS
- Auth en todos los endpoints que lo requieran
- Tokens con expiración
- Rate limiting en login y endpoints públicos
- CORS configurado (no wildcard * en producción)
- HTTPS en producción
- Headers de seguridad (HSTS, X-Content-Type-Options, etc.)
- Errores no exponen stack traces ni info interna al usuario
- Timeouts configurados en requests externos
- Logs no contienen passwords, tokens, ni PII
- Errores críticos alertan (no solo loguean)
- Health checks en servicios críticos
- Sin vulnerabilidades conocidas (
npm audit,pip audit) - Versiones pinneadas (no latest/*)
- Lock files (package-lock.json, poetry.lock) commiteados
- No correr como root dentro del container
- .dockerignore incluye .env, .git, node_modules
- Imágenes base con versión específica (no :latest)
- Secrets NO en build args ni en layers
Claude Code soporta 6 modos de permisos que controlan cuándo se requiere confirmación:
- default: confirmar en toda operación potencialmente destructiva
- acceptEdits: auto-aceptar edits de archivo, confirmar operaciones destructivas
- plan: read-only, sin operaciones write/bash/agent
- auto (YOLO): prompts mínimos, reglas de allow amplias — ver reglas de stripping abajo
- dontAsk: raramente usado; deshabilitar prompts completamente (peligroso)
- bypassPermissions: saltear todos los checks de permiso (local dev únicamente)
- Verificar reglas de stripping en modo auto: patrones amplios de intérpretes (python, python3, node, etc.), ejecutores de paquetes (npx, npm run, yarn run, etc.) y shells (bash, sh, zsh, eval, etc.) se ELIMINAN SILENCIOSAMENTE al activar modo auto
- Reemplazar patrones de allow con intérpretes por comandos específicos de herramientas: usar
pytesten vez depython,uvicornen vez depython,vitest/jesten vez denode - Documentar qué permisos se eliminan en modo auto para conciencia del equipo
- Probar workflows críticos con modo auto activado para verificar que siguen funcionando