Skip to content

Security: 3m-abro/todo-app

Security

docs/SECURITY.md

Todo App - Security Documentation

Security Overview

This document outlines the comprehensive security measures implemented in the Todo App to protect against common vulnerabilities and ensure data integrity, confidentiality, and availability.

Security Architecture

Defense in Depth

The application implements multiple layers of security:

  1. Network Security: Firewalls, network policies, and secure communication
  2. Application Security: Input validation, authentication, and authorization
  3. Data Security: Encryption at rest and in transit
  4. Infrastructure Security: Container security and runtime protection
  5. Operational Security: Monitoring, logging, and incident response

Authentication & Authorization

JWT Authentication

// JWT token structure
{
  "sub": "user_id",
  "email": "user@example.com",
  "role": "user",
  "iat": 1234567890,
  "exp": 1234567890
}

Security Features:

  • Short-lived access tokens (15 minutes)
  • Refresh token rotation
  • Token blacklisting on logout
  • Secure token storage (httpOnly cookies)

Password Security

// Password hashing with bcrypt
const saltRounds = 12;
const hashedPassword = await bcrypt.hash(password, saltRounds);

Security Features:

  • bcrypt with 12 salt rounds
  • Password complexity requirements
  • Password history prevention
  • Account lockout after failed attempts

Role-Based Access Control (RBAC)

// Role definitions
enum UserRole {
  ADMIN = 'admin',
  USER = 'user',
  GUEST = 'guest'
}

// Permission matrix
const permissions = {
  [UserRole.ADMIN]: ['read', 'write', 'delete', 'admin'],
  [UserRole.USER]: ['read', 'write'],
  [UserRole.GUEST]: ['read']
};

Input Validation & Sanitization

Joi Schema Validation

// Task creation validation
const createTaskSchema = Joi.object({
  title: Joi.string().min(1).max(100).required(),
  description: Joi.string().max(500).optional(),
  priority: Joi.string().valid('low', 'medium', 'high').required(),
  status: Joi.string().valid('todo', 'in_progress', 'done').required(),
  dueDate: Joi.date().iso().optional()
});

Security Features:

  • Strict input validation
  • SQL injection prevention
  • XSS protection
  • Data type enforcement
  • Length limits and format validation

Input Sanitization

// HTML sanitization
import DOMPurify from 'dompurify';

const sanitizedInput = DOMPurify.sanitize(userInput);

Data Protection

Encryption at Rest

  • Database: PostgreSQL with TDE (Transparent Data Encryption)
  • Secrets: Kubernetes secrets with encryption
  • Backups: Encrypted backup storage
  • Logs: Encrypted log storage

Encryption in Transit

  • HTTPS: TLS 1.3 for all communications
  • Database: SSL/TLS for database connections
  • Internal: mTLS for service-to-service communication
  • API: JWT tokens for API authentication

Data Classification

// Data sensitivity levels
enum DataSensitivity {
  PUBLIC = 'public',
  INTERNAL = 'internal',
  CONFIDENTIAL = 'confidential',
  RESTRICTED = 'restricted'
}

Network Security

Network Policies

# Kubernetes Network Policy
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: todo-app-network-policy
spec:
  podSelector:
    matchLabels:
      app: todo-app
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          name: frontend
    ports:
    - protocol: TCP
      port: 3001

Firewall Rules

  • Ingress: Only necessary ports open
  • Egress: Restricted outbound connections
  • DMZ: Demilitarized zone for public-facing services
  • Internal: Private network segmentation

Container Security

Pod Security Policies

# Pod Security Policy
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: todo-app-psp
spec:
  privileged: false
  allowPrivilegeEscalation: false
  requiredDropCapabilities:
    - ALL
  runAsUser:
    rule: 'MustRunAsNonRoot'
  seLinux:
    rule: 'RunAsAny'
  fsGroup:
    rule: 'RunAsAny'

Container Hardening

  • Non-root User: Containers run as non-root
  • Read-only Filesystem: Immutable container filesystem
  • Minimal Base Images: Alpine Linux base images
  • Security Scanning: Regular vulnerability scanning
  • Image Signing: Container image signing and verification

API Security

Rate Limiting

// Rate limiting configuration
const rateLimit = require('express-rate-limit');

const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 minutes
  max: 100, // limit each IP to 100 requests per windowMs
  message: 'Too many requests from this IP',
  standardHeaders: true,
  legacyHeaders: false,
});

CORS Configuration

// CORS security configuration
const corsOptions = {
  origin: process.env.ALLOWED_ORIGINS?.split(',') || ['http://localhost:3000'],
  credentials: true,
  optionsSuccessStatus: 200,
  methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
  allowedHeaders: ['Content-Type', 'Authorization']
};

Security Headers

// Security headers middleware
app.use(helmet({
  contentSecurityPolicy: {
    directives: {
      defaultSrc: ["'self'"],
      styleSrc: ["'self'", "'unsafe-inline'"],
      scriptSrc: ["'self'"],
      imgSrc: ["'self'", "data:", "https:"],
    },
  },
  hsts: {
    maxAge: 31536000,
    includeSubDomains: true,
    preload: true
  }
}));

Monitoring & Incident Response

Security Monitoring

// Security event logging
const securityLogger = winston.createLogger({
  level: 'info',
  format: winston.format.combine(
    winston.format.timestamp(),
    winston.format.json()
  ),
  transports: [
    new winston.transports.File({ filename: 'security.log' })
  ]
});

// Log security events
securityLogger.info('Failed login attempt', {
  ip: req.ip,
  userAgent: req.get('User-Agent'),
  timestamp: new Date().toISOString()
});

Alert Rules

# Prometheus alert rules
groups:
- name: security
  rules:
  - alert: HighFailedLoginRate
    expr: rate(login_failures_total[5m]) > 0.1
    for: 2m
    labels:
      severity: warning
    annotations:
      summary: "High failed login rate detected"
      description: "Failed login rate is {{ $value }} per second"

Incident Response

  1. Detection: Automated monitoring and alerting
  2. Analysis: Security team investigation
  3. Containment: Immediate threat isolation
  4. Eradication: Remove threat and vulnerabilities
  5. Recovery: Restore normal operations
  6. Lessons Learned: Post-incident review

Compliance & Governance

SOC 2 Type II Compliance

Security Principles:

  • CC1: Control Environment
  • CC2: Communication and Information
  • CC3: Risk Assessment
  • CC4: Monitoring Activities
  • CC5: Control Activities

Implementation:

  • Access controls and authentication
  • Data encryption and protection
  • Monitoring and logging
  • Incident response procedures
  • Regular security assessments

GDPR Compliance

Data Protection:

  • Data minimization
  • Purpose limitation
  • Storage limitation
  • Accuracy and integrity
  • Confidentiality and security

User Rights:

  • Right to access
  • Right to rectification
  • Right to erasure
  • Right to data portability
  • Right to object

OWASP Top 10 Protection

  1. A01: Broken Access Control - RBAC implementation
  2. A02: Cryptographic Failures - Encryption at rest and in transit
  3. A03: Injection - Input validation and parameterized queries
  4. A04: Insecure Design - Secure architecture and threat modeling
  5. A05: Security Misconfiguration - Hardened configurations
  6. A06: Vulnerable Components - Dependency scanning
  7. A07: Authentication Failures - Strong authentication
  8. A08: Software and Data Integrity - Code signing and integrity checks
  9. A09: Logging Failures - Comprehensive logging
  10. A10: Server-Side Request Forgery - Input validation and allowlists

Security Testing

Automated Security Testing

# Security scanning in CI/CD
- name: Run security scan
  uses: aquasecurity/trivy-action@master
  with:
    scan-type: 'fs'
    scan-ref: '.'
    format: 'sarif'
    output: 'trivy-results.sarif'

Penetration Testing

  • External Testing: Third-party penetration testing
  • Internal Testing: Internal security assessments
  • Code Review: Security-focused code reviews
  • Vulnerability Scanning: Regular vulnerability assessments

Security Metrics

  • Vulnerability Count: Track and trend vulnerabilities
  • Mean Time to Detection: Security incident detection time
  • Mean Time to Response: Security incident response time
  • Security Training: Team security awareness metrics

Security Best Practices

Development

  • Secure Coding: Follow secure coding practices
  • Code Review: Security-focused code reviews
  • Dependency Management: Regular dependency updates
  • Secret Management: Secure secret handling

Operations

  • Access Management: Principle of least privilege
  • Monitoring: Continuous security monitoring
  • Updates: Regular security updates
  • Backups: Secure backup procedures

Incident Response

  • Preparation: Incident response plan
  • Detection: Security monitoring
  • Response: Rapid incident response
  • Recovery: Business continuity planning

Security Contacts

Conclusion

The Todo App implements comprehensive security measures to protect against common vulnerabilities and ensure data security. Regular security assessments, monitoring, and updates are essential to maintain security posture.

There aren’t any published security advisories