--- name: security-best-practices description: Apply security hardening, input validation, and protection measures across all operations --- ## When to use Use when the user asks to: - Secure an application or system - Audit code for vulnerabilities - Set up authentication/authorization - Harden configurations - Perform security reviews - Handle secrets and credentials ## Core Principles ### 1. Defense in Depth Apply multiple layers of security: - Input validation - Authentication - Authorization - Output encoding - Encryption - Auditing ### 2. Least Privilege Agents/tools should have only the permissions they need: - File access: restrict to specific directories - Network: allow only required endpoints - Tools: disable dangerous ones when not needed ### 3. Fail Securely Errors should not reveal sensitive information: - Generic error messages to users - Detailed errors only in logs (protected) - Secure defaults (deny by default) ## Security Checklist ### Input Validation - [ ] Validate all user inputs (type, length, format, range) - [ ] Sanitize to remove/escape dangerous characters - [ ] Use parameterized queries (no string concatenation) - [ ] Reject unexpected values early ### Authentication & Authorization - [ ] Use strong, salted password hashing (bcrypt, Argon2) - [ ] Implement multi-factor authentication for sensitive operations - [ ] Enforce least privilege (RBAC/ABAC) - [ ] Use short-lived tokens, rotate regularly - [ ] Validate permissions on every request ### Secrets Management - [ ] Never hardcode secrets in source code - [ ] Use environment variables or secret vaults - [ ] Rotate credentials regularly - [ ] Different secrets per environment (dev/staging/prod) - [ ] Don't log secrets (redact from logs) ### Data Protection - [ ] Encrypt sensitive data at rest (AES-256) - [ ] Use TLS 1.2+ for data in transit - [ ] Secure backups (encrypted, access-controlled) - [ ] Anonymize/pseudonymize PII when possible ### Output Encoding - [ ] Encode data before rendering (HTML escape, SQL escape, shell escape) - [ ] Use templating engines with auto-escaping - [ ] Content Security Policy (CSP) headers for web apps ### Dependency Security - [ ] Regularly audit dependencies for CVEs - [ ] Use minimal dependencies - [ ] Pin versions (avoid floating ranges) - [ ] Update promptly when vulnerabilities disclosed ## Code Review Security Points Review code for: - **SQL injection**: raw queries with string concatenation - **XSS**: unescaped output in HTML/JS - **CSRF**: missing tokens on state-changing requests - **Path traversal**: user-controlled file paths without validation - **Insecure deserialization**: untrusted data → object creation - **Hardcoded secrets**: passwords, API keys in source - **Weak crypto**: MD5, SHA1, custom algorithms, hardcoded keys ## Configuration Hardening ### File permissions ```bash chmod 600 ~/.openclaw/credentials/*.json # Owner read/write only chmod 700 ~/.openclaw/workspace # Restrict workspace ``` ### Network security - Firewall: allow only necessary ports - VPN for remote access - Disable unnecessary services ### Audit logging Log all security events: - Authentication attempts (success/failure) - Authorization failures - Configuration changes - Data access (especially PII) Include: timestamp, user, action, IP, outcome ## Incident Response If a breach is suspected: 1. **Isolate**: Cut off network access if possible 2. **Preserve logs**: Don't delete; copy for analysis 3. **Assess scope**: Which systems/data affected? 4. **Notify**: Follow disclosure procedures 5. **Remediate**: Patch vulnerabilities, rotate credentials 6. **Post-mortem**: Document lessons learned ## Tools for Security Audit Use OpenClaw skills: - `security-review`: Automated code security scan - `systematic-debugging`: Identify root cause of vulnerabilities - `code-quality-gate`: Enforce security standards External tools: - OWASP ZAP / Burp Suite (web scanning) - Trivy / Grype (dependency scanning) - Bandit / Semgrep (SAST) - sqlmap (SQL injection testing) ## Examples Database query with parameterized statement: ```python cursor.execute("SELECT * FROM users WHERE email = %s", (email,)) ``` ```python query = f"SELECT * FROM users WHERE email = '{email}'" cursor.execute(query) # SQL injection vulnerability ``` ## Compliance Considerations Depending on industry: - **GDPR**: Data protection, privacy by design, breach notification - **PCI DSS**: Payment card data handling - **HIPAA**: Healthcare data encryption and access logs - **SOC 2**: Security controls and audit trails ## Verification Checklist - [ ] All user inputs validated and sanitized - [ ] No hardcoded secrets in codebase - [ ] Secrets stored securely (env vars, vault) - [ ] Database queries use parameterized statements - [ ] Output properly encoded for context (HTML, SQL, shell) - [ ] Authentication strong (bcrypt, 2FA) - [ ] Authorization checks on all protected actions - [ ] Sensitive data encrypted at rest and in transit - [ ] Audit logs capture security events - [ ] Dependencies up-to-date with no known CVEs - [ ] Regular security scans performed - [ ] Incident response plan documented