secure-coding
OWASP secure coding practices, language-specific security considerations, input validation and output encoding, authentication and authorization patterns, cryptography best practices, secure API design, and common security anti-patterns
What this skill does
# Secure Coding ## OWASP Secure Coding Practices ### Input Validation - **Validate All Input**: Validate all input from untrusted sources (user input, APIs, files) - **Whitelist Approach**: Use whitelisting (allow-list) instead of blacklisting - **Validate Type, Length, Format**: Validate data type, length, and format - **Sanitize Output**: Encode output to prevent injection attacks - **Canonicalize Input**: Canonicalize input before validation to prevent bypasses ### Output Encoding - **Context-Specific Encoding**: Use encoding appropriate for the context (HTML, JavaScript, URL, CSS) - **Encode User-Generated Content**: Encode all user-generated content before output - **Use Framework Encoding**: Use framework-provided encoding functions - **Avoid Manual Encoding**: Avoid manual encoding as it's error-prone ### Authentication - **Strong Passwords**: Enforce strong password policies (length, complexity, rotation) - **Secure Password Storage**: Use strong, slow hashing algorithms (bcrypt, Argon2, scrypt) - **Multi-Factor Authentication**: Implement MFA for sensitive operations - **Secure Session Management**: Use secure, HTTP-only, SameSite cookies - **Session Expiration**: Implement appropriate session timeout - **Secure Password Reset**: Implement secure password reset mechanisms ### Authorization - **Principle of Least Privilege**: Grant minimum necessary permissions - **Role-Based Access Control**: Implement RBAC for authorization - **Attribute-Based Access Control**: Consider ABAC for complex authorization - **Deny by Default**: Deny access by default, explicitly allow - **Check Authorization on Every Request**: Verify authorization on every request - **Avoid IDOR**: Prevent Insecure Direct Object References ### Cryptography - **Use Standard Algorithms**: Use well-vetted, standard cryptographic algorithms - **Avoid Rolling Your Own Crypto**: Never implement custom cryptography - **Use Secure Key Management**: Properly generate, store, and rotate keys - **Use Authenticated Encryption**: Use authenticated encryption (AEAD) when possible - **Avoid Deprecated Algorithms**: Avoid MD5, SHA1, RC4, DES, etc. - **Use TLS**: Use TLS for all network communications ### Error Handling - **Generic Error Messages**: Use generic error messages for users - **Detailed Logging**: Log detailed error information server-side - **Don't Leak Information**: Avoid leaking sensitive information in errors - **Handle Exceptions**: Properly handle exceptions to prevent information disclosure - **Custom Error Pages**: Use custom error pages to prevent information leakage ## Language-Specific Security Considerations ### JavaScript/TypeScript - **XSS Prevention**: Use frameworks with built-in XSS protection (React, Vue, Angular) - **Content Security Policy**: Implement CSP to mitigate XSS - **Avoid eval()**: Avoid using eval() and similar dynamic code execution - **Validate JSON**: Validate JSON input before parsing - **Use Strict Mode**: Use strict mode to catch common errors - **Sanitize HTML**: Use DOMPurify or similar libraries for HTML sanitization ### Python - **SQL Injection**: Use parameterized queries or ORM - **Command Injection**: Avoid shell=True in subprocess calls - **Pickle Security**: Avoid unpickling untrusted data - **Template Injection**: Use secure template engines (Jinja2 auto-escaping) - **YAML Loading**: Use yaml.safe_load() instead of yaml.load() - **Input Validation**: Validate input using libraries like pydantic ### Java - **SQL Injection**: Use PreparedStatement or JPA - **XSS Prevention**: Use OWASP ESAPI or framework-provided encoding - **Deserialization**: Avoid deserializing untrusted data - **XML Security**: Disable XML external entities (XXE) - **Path Traversal**: Validate file paths to prevent directory traversal - **Secure Random**: Use SecureRandom for cryptographic random numbers ### Go - **SQL Injection**: Use prepared statements with sql package - **Path Traversal**: Use filepath.Join() and validate paths - **Command Injection**: Avoid shell commands, use exec package - **Template Injection**: Use html/template with auto-escaping - **Error Handling**: Always handle errors explicitly - **Input Validation**: Validate input before use ### C/C++ - **Buffer Overflows**: Use safe string functions (strncpy_s, snprintf) - **Memory Safety**: Use memory-safe alternatives when possible - **Integer Overflow**: Check for integer overflow before arithmetic - **Format String Vulnerabilities**: Avoid user-controlled format strings - **Use Safe Libraries**: Use safe string and memory libraries - **Static Analysis**: Use static analysis tools to catch issues ### PHP - **SQL Injection**: Use PDO with prepared statements - **XSS Prevention**: Use htmlspecialchars() or framework escaping - **File Upload**: Validate and sanitize uploaded files - **Include Files**: Avoid user-controlled include files - **Type Juggling**: Be aware of PHP's type juggling - **Configuration**: Use secure configuration settings ## Input Validation and Output Encoding ### Input Validation Techniques - **Type Validation**: Validate data type (integer, string, date, etc.) - **Length Validation**: Validate minimum and maximum length - **Format Validation**: Validate format (email, phone, URL, etc.) - **Range Validation**: Validate numeric ranges - **Pattern Validation**: Use regex patterns for complex validation - **Business Rule Validation**: Validate against business rules ### Output Encoding Contexts - **HTML Context**: Encode for HTML entities (<, >, &, ", ') - **JavaScript Context**: Encode for JavaScript strings - **URL Context**: Encode for URL parameters - **CSS Context**: Encode for CSS values - **Attribute Context**: Encode for HTML attributes ### Encoding Libraries - **JavaScript**: DOMPurify, encodeURI(), encodeURIComponent() - **Python**: html.escape(), urllib.parse.quote() - **Java**: OWASP ESAPI, Apache Commons Text - **Go**: html.EscapeString(), url.QueryEscape() - **PHP**: htmlspecialchars(), urlencode() ## Authentication and Authorization Patterns ### Authentication Patterns - **Multi-Factor Authentication**: Require multiple factors for authentication - **Password Hashing**: Use bcrypt, Argon2, or scrypt for password hashing - **Password Policies**: Enforce strong password policies - **Account Lockout**: Implement account lockout after failed attempts - **Password Reset**: Implement secure password reset flows - **Session Management**: Use secure session management practices ### Authorization Patterns - **Role-Based Access Control (RBAC)**: Assign permissions to roles, roles to users - **Attribute-Based Access Control (ABAC)**: Use attributes for fine-grained access control - **Access Control Lists (ACL)**: Define access rights for resources - **Capability-Based Security**: Use capabilities for access control - **Policy-Based Access Control**: Use policies for access decisions - **Hybrid Approaches**: Combine multiple authorization patterns ### Session Management - **Secure Cookies**: Use secure, HTTP-only, SameSite cookies - **Session Expiration**: Implement appropriate session timeout - **Session Fixation**: Generate new session ID after authentication - **Session Storage**: Store session data securely - **Logout**: Implement proper logout functionality - **Concurrent Sessions**: Limit concurrent sessions if needed ## Cryptography Best Practices ### Encryption - **Use Standard Algorithms**: Use AES-256, ChaCha20-Poly1305, or similar - **Use Authenticated Encryption**: Prefer AEAD modes (GCM, CCM, ChaCha20-Poly1305) - **Key Management**: Use proper key management (HSM, KMS, key rotation) - **IV/Nonce**: Use unique IV/nonce for each encryption - **Key Derivation**: Use PBKDF2, Argon2, or scrypt for key derivation - **Avoid ECB Mode**: Never use ECB mode for encryption ### Hashing - **Use Strong Hashes**: Use SHA-256 or stronger for general hashing - **Password Hashing**: Use bcrypt, Argon2, or scrypt for passwords - **Salt
Related in Design
contribute
IncludedLocal-only OSS contribution command center. Auto-refreshes the user's in-flight PR and issue state on invoke so conversations start with full context — no need to brief Claude on what's in flight. Helps the user find issues to contribute to on GitHub, builds per-repo dossiers of what each upstream expects (CLA, DCO, branch convention, AI policy, draft-first, review bots, issue templates), runs deterministic gates before any external action so AI-assisted contributions don't reach maintainers as slop. State is markdown-only: candidate files at ~/.contribute-system/candidates/, repo dossiers at ~/.contribute-system/research/, append-only event log at ~/.contribute-system/log.jsonl. No database, no cloud calls. Use when the user asks about their PRs / issues / contributions, wants to find new work to take on, claim an issue, build/refresh a repo's dossier, or draft a Design Issue or PR. Trigger with "/contribute", "what's my PR status", "find a contribution", "claim issue X", "draft a Design Issue for Y", "refresh dossier for Z".
architectural-analysis
IncludedUser-triggered deep architectural analysis of a codebase or scoped subtree across eight modes — information architecture, data flow, integration points, UI surfaces, interaction patterns, data model, control flow, and failure modes. This skill should be used when the user asks to "diagram this codebase," "map the architecture," "show the data flow," "give me an ERD," "trace control flow," "find the integration points," "verify the layout pattern," "audit the UX architecture," or any similar request whose primary deliverable is mermaid diagrams plus cited reports under docs/architecture/. Dispatches haiku/sonnet sub-agents in parallel for per-mode exploration, then verifies every citation mechanically before any node lands in a diagram. Not for one-off prose explanations of code (use code-explanation) or for high-level system design from scratch (use system-design).
mcp
IncludedModel Context Protocol (MCP) server development and tool management. Languages: Python, TypeScript. Capabilities: build MCP servers, integrate external APIs, discover/execute MCP tools, manage multi-server configs, design agent-centric tools. Actions: create, build, integrate, discover, execute, configure MCP servers/tools. Keywords: MCP, Model Context Protocol, MCP server, MCP tool, stdio transport, SSE transport, tool discovery, resource provider, prompt template, external API integration, Gemini CLI MCP, Claude MCP, agent tools, tool execution, server config. Use when: building MCP servers, integrating external APIs as MCP tools, discovering available MCP tools, executing MCP capabilities, configuring multi-server setups, designing tools for AI agents.
react-native-skia
IncludedDesign, build, debug, and optimise high-polish animated graphics in React Native or Expo using @shopify/react-native-skia, Reanimated, and Gesture Handler. Use when the user wants canvas-driven UI, shaders, paths, rich text, image filters, sprite fields, Skottie, video frames, snapshots, web CanvasKit setup, or performance tuning for custom motion-heavy elements such as loaders, hero art, cards, charts, progress indicators, particle systems, or gesture-driven surfaces. Also use when the user asks for fluid, glow, glass, blob, parallax, 60fps/120fps, or GPU-friendly animated effects in React Native, even if they do not explicitly say "Skia". Do not use for ordinary form/layout work with standard views.
plaid
IncludedProduct Led AI Development — guides founders from idea to launched product. Six capabilities: Idea (discover a product idea), Validate (pressure-test the idea against fatal flaws, problem reality, competition, and 2-week MVP feasibility), Plan (vision intake + document generation), Design (translate image references into a design.md spec), Launch (go-to-market strategy), and Build (roadmap execution). Use when someone says "PLAID", "plaid idea", "help me find an idea", "product idea", "idea from my business", "idea from my expertise", "plaid validate", "validate my idea", "pressure-test", "is this idea good", "find fatal flaws", "validate the problem", "plan a product", "define my vision", "generate a PRD", "product strategy", "plaid design", "design from image", "translate image to design", "create design.md", "extract design tokens", "plaid launch", "go-to-market", "launch plan", "GTM strategy", "launch playbook", "plaid build", "build the app", "start building", or "execute the roadmap".
nextjs-framer-motion-animations
IncludedAdds production-safe Motion for React or Framer Motion animations to Next.js apps, including reveal, hover and tap micro-interactions, whileInView, stagger, AnimatePresence, layout and layoutId transitions, reorder, scroll-linked UI, and lightweight route-content transitions. Use when the user asks to add, refactor, or debug Motion or Framer Motion in App Router or Pages Router codebases, especially around server/client boundaries, reduced motion, LazyMotion, bundle size, hydration, or route transitions. Avoid for GSAP-style timelines, WebGL or 3D scenes, heavy scroll storytelling, or CSS-only effects unless Motion is explicitly requested.