| name | cloudflare-security-checker |
| description | Automatically validates Cloudflare Workers security patterns during development, ensuring proper secret management, CORS configuration, and input validation |
| triggers | ["authentication code","secret handling","API endpoints","response creation","database queries"] |
Cloudflare Security Checker SKILL
Activation Patterns
This SKILL automatically activates when:
- Authentication or authorization code is detected
- Secret management patterns are used
- API endpoints or response creation is implemented
- Database queries (D1) are written
- CORS-related code is added
- Input validation patterns are implemented
Expertise Provided
Workers-Specific Security Validation
- Secret Management: Ensures proper
env parameter usage vs hardcoded secrets
- CORS Configuration: Validates Workers-specific CORS implementation
- Input Validation: Checks for proper request validation patterns
- SQL Injection Prevention: Ensures D1 prepared statements
- Authentication Patterns: Validates JWT and API key handling
- Rate Limiting: Identifies missing rate limiting patterns
Specific Checks Performed
❌ Critical Security Violations
const API_KEY = "sk_live_xxx";
const secret = process.env.JWT_SECRET;
const query = `SELECT * FROM users WHERE id = ${userId}`;
✅ Secure Workers Patterns
const apiKey = env.API_KEY;
const result = await env.DB.prepare('SELECT * FROM users WHERE id = ?').bind(userId);
Integration Points
Complementary to Existing Components
- cloudflare-security-sentinel agent: Handles comprehensive security audits, SKILL provides immediate validation
- workers-runtime-validator SKILL: Complements runtime checks with security-specific validation
- es-deploy command: SKILL prevents deployment of insecure code
Escalation Triggers
- Complex security architecture questions →
cloudflare-security-sentinel agent
- Advanced authentication patterns →
cloudflare-architecture-strategist agent
- Security incident response →
cloudflare-security-sentinel agent
Validation Rules
P1 - Critical (Immediate Security Risk)
- Hardcoded Secrets: API keys, passwords, tokens in code
- SQL Injection: String concatenation in D1 queries
- Missing Authentication: Sensitive endpoints without auth
- Process Env Usage:
process.env for secrets (doesn't work in Workers)
P2 - High (Security Vulnerability)
- Missing Input Validation: Direct use of
request.json() without validation
- Improper CORS: Missing CORS headers or overly permissive origins
- Missing Rate Limiting: Public endpoints without rate limiting
- Secrets in Config: Secrets in wrangler.toml
[vars] section
P3 - Medium (Security Best Practice)
- Missing Security Headers: HTML responses without CSP/XSS protection
- Weak Authentication: No resource-level authorization
- Insufficient Logging: Security events not logged
Remediation Examples
Fixing Secret Management
const STRIPE_KEY = "sk_live_12345";
const apiKey = process.env.API_KEY;
export default {
async fetch(request: Request, env: Env) {
const apiKey = env.STRIPE_KEY;
}
}
Fixing SQL Injection
const userId = url.searchParams.get('id');
const result = await env.DB.prepare(`SELECT * FROM users WHERE id = ${userId}`).first();
const userId = url.searchParams.get('id');
const result = await env.DB.prepare('SELECT * FROM users WHERE id = ?').bind(userId).first();
Fixing CORS Configuration
export default {
async fetch(request: Request, env: Env) {
return new Response(JSON.stringify(data));
}
}
function getCorsHeaders(origin: string) {
const allowedOrigins = ['https://app.example.com'];
const allowOrigin = allowedOrigins.includes(origin) ? origin : allowedOrigins[0];
return {
'Access-Control-Allow-Origin': allowOrigin,
'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
'Access-Control-Allow-Headers': 'Content-Type, Authorization',
'Access-Control-Max-Age': '86400',
};
}
export default {
async fetch(request: Request, env: Env) {
const origin = request.headers.get('Origin') || '';
if (request.method === ) {
(, { : (origin) });
}
response = (.(data));
.((origin)).( {
response..(k, v);
});
response;
}
}
Fixing Input Validation
export default {
async fetch(request: Request, env: Env) {
const data = await request.json();
await env.DB.prepare('INSERT INTO users (name) VALUES (?)').bind(data.name).run();
}
}
import { z } from 'zod';
const UserSchema = z.object({
name: z.string().min(1).max(100),
email: z.string().email(),
});
export default {
async fetch(request: Request, env: Env) {
const contentLength = request.headers.get('Content-Length');
if (contentLength && (contentLength) > * ) {
(, { : });
}
data = request.();
result = .(data);
(!result.) {
(.(result.), { : });
}
env..()
.(result.., result..).();
}
}
MCP Server Integration
When Cloudflare MCP server is available:
- Query latest Cloudflare security best practices
- Verify secrets are configured in account
- Check for recent security events affecting the project
- Get current security recommendations
Benefits
Immediate Impact
- Prevents Security Vulnerabilities: Catches issues during development
- Educates on Workers Security: Clear explanations of Workers-specific security patterns
- Reduces Security Debt: Immediate feedback on security anti-patterns
Long-term Value
- Consistent Security Standards: Ensures all code follows Workers security best practices
- Faster Security Reviews: Automated validation reduces manual review time
- Better Security Posture: Proactive security validation vs reactive fixes
Usage Examples
During Authentication Implementation
During API Development
During Database Query Writing
This SKILL ensures Workers security by providing immediate, autonomous validation of security patterns, preventing common vulnerabilities and ensuring proper Workers-specific security practices.