secure-coding

SKILL.md

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: Use unique salt for each password hash
  • Slow Hashing: Use computationally expensive hashing for passwords
  • Avoid MD5/SHA1: Avoid MD5 and SHA1 for security purposes

Key Management

  • Key Generation: Use cryptographically secure random number generators
  • Key Storage: Store keys securely (HSM, KMS, encrypted at rest)
  • Key Rotation: Rotate keys regularly
  • Key Separation: Use different keys for different purposes
  • Key Destruction: Securely destroy keys when no longer needed
  • Key Escrow: Consider key escrow for recovery if needed

TLS/SSL

  • Use TLS 1.3: Prefer TLS 1.3 when available
  • Strong Ciphers: Use strong cipher suites
  • Certificate Validation: Always validate certificates
  • HSTS: Implement HTTP Strict Transport Security
  • Perfect Forward Secrecy: Use cipher suites with PFS
  • Disable Weak Protocols: Disable SSLv2, SSLv3, TLS 1.0, TLS 1.1

Secure API Design

API Security Best Practices

  • Authentication: Implement strong authentication (OAuth 2.0, JWT, API keys)
  • Authorization: Implement proper authorization for all endpoints
  • Rate Limiting: Implement rate limiting to prevent abuse
  • Input Validation: Validate all input to API endpoints
  • Output Encoding: Encode output appropriately
  • Error Handling: Use generic error messages, log details server-side
  • HTTPS: Always use HTTPS for API communication
  • API Versioning: Use versioning to manage breaking changes
  • Documentation: Document security considerations
  • Monitoring: Monitor API usage for anomalies

REST API Security

  • Stateless: Keep APIs stateless
  • Resource-Based Design: Design around resources
  • HTTP Methods: Use HTTP methods correctly (GET, POST, PUT, DELETE)
  • Status Codes: Use appropriate HTTP status codes
  • Pagination: Implement pagination for large datasets
  • Filtering/Sorting: Allow filtering and sorting
  • CORS: Configure CORS appropriately
  • CSRF: Implement CSRF protection for state-changing operations

GraphQL Security

  • Query Depth Limiting: Limit query depth to prevent DoS
  • Query Complexity Limiting: Limit query complexity
  • Rate Limiting: Implement rate limiting
  • Authentication: Implement authentication at the resolver level
  • Authorization: Implement authorization at the resolver level
  • Introspection: Disable introspection in production
  • Field-Level Authorization: Implement field-level authorization

Common Security Anti-Patterns

Code Anti-Patterns

  • Hardcoded Secrets: Never hardcode passwords, API keys, or tokens
  • SQL String Concatenation: Never concatenate SQL strings
  • Shell Command Concatenation: Never concatenate shell commands
  • eval() Usage: Avoid using eval() or similar functions
  • Trust Client-Side Validation: Never trust client-side validation
  • Ignore Error Messages: Don't ignore error messages
  • Roll Your Own Crypto: Never implement custom cryptography

Configuration Anti-Patterns

  • Default Credentials: Never use default credentials in production
  • Debug Mode: Never enable debug mode in production
  • Verbose Error Messages: Don't expose detailed errors to users
  • Insecure Defaults: Don't use insecure default configurations
  • Unnecessary Services: Don't run unnecessary services
  • Open Ports: Don't expose unnecessary ports

Architecture Anti-Patterns

  • Security Through Obscurity: Never rely on obscurity for security
  • Single Layer of Defense: Never rely on a single security control
  • Trust Boundaries: Don't trust components across trust boundaries
  • Assume Safe Input: Never assume input is safe
  • Ignore Logging: Don't ignore security logging
  • Skip Testing: Never skip security testing

Development Anti-Patterns

  • Skip Code Review: Never skip security code reviews
  • Ignore Dependencies: Don't ignore dependency vulnerabilities
  • Rush Deployment: Don't rush deployments without testing
  • Disable Security Controls: Never disable security controls for convenience
  • Ignore Alerts: Don't ignore security alerts
  • Assume It's Secure: Never assume something is secure without verification
Weekly Installs
2
GitHub Stars
2
First Seen
Feb 14, 2026
Installed on
opencode2
gemini-cli2
antigravity2
claude-code2
github-copilot2
codex2