Claude Skills Guide

Cross-Origin Resource Sharing (CORS) misconfigurations remain one of the most common and potentially dangerous security issues in modern web applications. Whether you’re building APIs that serve multiple frontend applications or integrating third-party services, understanding how to properly configure CORS is essential. This guide walks you through using Claude Code to identify, diagnose, and fix CORS misconfigurations efficiently.

Understanding CORS Misconfigurations

Before diving into the fix workflow, it’s important to understand what CORS protects against and why misconfigurations occur. CORS is a browser security mechanism that restricts web pages from making requests to domains different from the one serving the web page. While this protection is valuable, improper configuration can either block legitimate traffic or—more dangerously—allow malicious cross-origin access.

Common CORS Misconfiguration Patterns

Several patterns frequently appear in production environments:

  1. Wildcard Origin (Access-Control-Allow-Origin: *) - The most common misconfiguration, allowing any website to access your API
  2. Improper Credential Handling - Allowing credentials with wildcard origins
  3. Missing Access-Control-Allow-Methods - Not restricting HTTP methods
  4. Improper Origin Validation - Using string matching instead of proper validation
  5. Missing Access-Control-Allow-Headers - Not specifying allowed request headers

Using Claude Code to Detect CORS Issues

Claude Code can help you identify CORS misconfigurations by analyzing your codebase and explaining potential issues. Start by asking Claude to review your CORS configuration:

Step 1: Analyze Your Current Configuration

Present your existing CORS setup to Claude Code and ask for analysis:

Here's my current CORS configuration. Please analyze it for security issues and suggest improvements:

[Insert your CORS middleware code here]

Claude will examine your configuration and identify specific issues, explaining why each pattern is problematic and what the potential security implications are.

Step 2: Review Response Headers

Ask Claude to help you understand what headers your API is currently sending:

// Ask Claude to analyze your response headers
// Common issues to check:
console.log(response.headers.get('Access-Control-Allow-Origin'));
console.log(response.headers.get('Access-Control-Allow-Credentials'));
console.log(response.headers.get('Access-Control-Allow-Methods'));

Implementing Secure CORS with Claude Code

Once you’ve identified issues, Claude Code can help you implement proper fixes. Here’s a practical workflow.

Secure CORS Middleware Example

Here’s a properly configured CORS middleware that Claude Code might help you implement:

// Secure CORS middleware implementation
const ALLOWED_ORIGINS = process.env.ALLOWED_ORIGINS?.split(',') || [];

function corsMiddleware(req, res, next) {
  const origin = req.headers.origin;
  
  // Validate origin against allowed list
  if (ALLOWED_ORIGINS.includes(origin)) {
    res.setHeader('Access-Control-Allow-Origin', origin);
    res.setHeader('Access-Control-Allow-Credentials', 'true');
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
    res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
    res.setHeader('Access-Control-Max-Age', '86400');
  }
  
  // Handle preflight requests
  if (req.method === 'OPTIONS') {
    return res.status(204).end();
  }
  
  next();
}

Dynamic Origin Validation

For applications with many allowed origins, implement dynamic validation:

// Dynamic origin validation with pattern matching
function validateOrigin(origin) {
  const allowedPatterns = [
    /^https:\/\/.*\.yourdomain\.com$/,
    /^https:\/\/yourdomain\.com$/,
    /^http:\/\/localhost(:\d+)?$/
  ];
  
  return allowedPatterns.some(pattern => pattern.test(origin));
}

Testing Your CORS Configuration

After implementing fixes, thorough testing is crucial. Claude Code can help you create comprehensive tests.

Testing with Node.js

// Comprehensive CORS tests
const testCases = [
  { origin: 'https://legitimate.yourdomain.com', expected: 200 },
  { origin: 'https://evil.attacker.com', expected: 403 },
  { origin: null, expected: 403 },
  { origin: '*', expected: 403 }
];

async function testCORSConfiguration() {
  for (const testCase of testCases) {
    const response = await fetch('https://api.yourdomain.com/data', {
      method: 'GET',
      headers: testCase.origin ? { 'Origin': testCase.origin } : {}
    });
    
    console.log(`Origin: ${testCase.origin}, Status: ${response.status}`);
    console.log('ACAO:', response.headers.get('Access-Control-Allow-Origin'));
  }
}

Best Practices for CORS Configuration

Follow these actionable recommendations when configuring CORS:

1. Never Use Wildcard in Production

Avoid Access-Control-Allow-Origin: * in production. Always specify exact origins:

// Instead of wildcard
res.setHeader('Access-Control-Allow-Origin', 'https://app.yourdomain.com');

2. Separate Origins from Credentials

Remember: when using credentials (Access-Control-Allow-Credentials: true), you cannot use wildcard origins. You must specify the exact origin.

3. Implement Origin Allowlist

Use environment variables to manage allowed origins:

// Configuration-driven approach
const config = {
  allowedOrigins: process.env.CORS_ALLOWED_ORIGINS.split(','),
  allowedMethods: ['GET', 'POST', 'PUT', 'DELETE'],
  allowedHeaders: ['Content-Type', 'Authorization'],
  maxAge: 86400
};

4. Log and Monitor CORS Violations

Track rejected requests to detect potential attacks:

function logCORSViolation(origin, ip) {
  console.warn(`CORS violation from ${origin} (${ip}) at ${new Date().toISOString()}`);
  // Send to your logging service
}

Automating CORS Audits with Claude Code

You can automate regular CORS security audits by asking Claude Code to review your configuration:

Review my CORS configuration weekly and check for:
1. Hardcoded origins
2. Missing security headers
3. Overly permissive settings
4. Missing origin validation

This proactive approach helps catch misconfigurations before they become security vulnerabilities.

Conclusion

CORS misconfigurations can lead to serious security vulnerabilities, but with Claude Code’s assistance, you can systematically identify, fix, and prevent these issues. The key is implementing strict origin validation, avoiding wildcards in production, and maintaining comprehensive test coverage. By following this workflow and leveraging Claude Code’s analysis capabilities, you’ll significantly improve your API’s security posture.

Remember: CORS should be treated as a defense-in-depth measure, not your only line of defense. Always validate inputs server-side and implement proper authentication regardless of CORS configuration.