security-header-generator
Configures web security headers based on the project framework to mitigate vulnerabilities.
Install
mkdir -p .claude/skills/security-header-generator && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/327" && unzip -o skill.zip -d .claude/skills/security-header-generator && rm skill.zipInstalls to .claude/skills/security-header-generator
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Generates security HTTP headers (CSP, HSTS, CORS, etc.) for web applications to prevent common attacks. Use when user asks to "add security headers", "setup CSP", "configure CORS", "secure headers", or "HSTS setup".Key capabilities
- →Detect web application frameworks and server types
- →Generate Content Security Policy directives
- →Configure HSTS, X-Frame-Options, and CORS headers
- →Provide environment-specific security configurations
- →Suggest security level presets for production and development
How it works
The skill scans the project for framework-specific files to identify the environment and then generates the appropriate security header configuration.
Inputs & outputs
When to use security-header-generator
- →Setting up CSP
- →Configuring CORS headers
- →Enabling HSTS
About this skill
Security Header Generator
Generates security HTTP headers for web applications to prevent XSS, clickjacking, MITM attacks, and more.
When to Use
- "Add security headers to my app"
- "Setup Content Security Policy"
- "Configure CORS headers"
- "Enable HSTS"
- "Secure my application headers"
- "Prevent clickjacking"
- "Setup security headers for Express/Next.js/nginx"
Instructions
1. Detect Application Type
Scan the project to identify:
# Check for various frameworks/servers
[ -f "package.json" ] && echo "Node.js project"
[ -f "next.config.js" ] && echo "Next.js"
[ -f ".htaccess" ] && echo "Apache"
[ -f "nginx.conf" ] && echo "nginx"
[ -f "app.py" ] && echo "Python/Flask"
[ -f "Startup.cs" ] && echo ".NET"
Present findings:
- Project type detected
- Current security headers (if any)
- Recommended headers based on app type
2. Explain Security Headers
Brief overview of what will be added:
Content Security Policy (CSP):
- Prevents XSS attacks
- Controls resource loading sources
- Mitigates data injection attacks
HTTP Strict Transport Security (HSTS):
- Forces HTTPS connections
- Prevents protocol downgrade attacks
- Protects against MITM attacks
X-Frame-Options:
- Prevents clickjacking
- Controls iframe embedding
- Protects against UI redress attacks
X-Content-Type-Options:
- Prevents MIME-sniffing
- Blocks content-type confusion attacks
Referrer-Policy:
- Controls referrer information leakage
- Protects user privacy
Permissions-Policy:
- Controls browser features
- Limits API access (camera, microphone, etc.)
CORS (Cross-Origin Resource Sharing):
- Controls cross-origin requests
- Prevents unauthorized API access
3. Generate Headers Configuration
Based on detected framework, generate appropriate configuration:
Framework-Specific Configurations
Next.js
Create or update next.config.js:
/** @type {import('next').NextConfig} */
const securityHeaders = [
{
key: 'Content-Security-Policy',
value: ContentSecurityPolicy.replace(/\n/g, ''),
},
{
key: 'X-DNS-Prefetch-Control',
value: 'on',
},
{
key: 'Strict-Transport-Security',
value: 'max-age=63072000; includeSubDomains; preload',
},
{
key: 'X-Frame-Options',
value: 'SAMEORIGIN',
},
{
key: 'X-Content-Type-Options',
value: 'nosniff',
},
{
key: 'X-XSS-Protection',
value: '1; mode=block',
},
{
key: 'Referrer-Policy',
value: 'strict-origin-when-cross-origin',
},
{
key: 'Permissions-Policy',
value: 'camera=(), microphone=(), geolocation=()',
},
]
// Content Security Policy
const ContentSecurityPolicy = `
default-src 'self';
script-src 'self' 'unsafe-eval' 'unsafe-inline';
style-src 'self' 'unsafe-inline';
img-src 'self' data: https:;
font-src 'self' data:;
object-src 'none';
base-uri 'self';
form-action 'self';
frame-ancestors 'none';
upgrade-insecure-requests;
`
const nextConfig = {
async headers() {
return [
{
source: '/:path*',
headers: securityHeaders,
},
]
},
}
module.exports = nextConfig
Express.js
Install helmet middleware:
npm install helmet
Configure in main app file:
const express = require('express')
const helmet = require('helmet')
const app = express()
// Use Helmet middleware
app.use(helmet({
contentSecurityPolicy: {
directives: {
defaultSrc: ["'self'"],
scriptSrc: ["'self'", "'unsafe-inline'"],
styleSrc: ["'self'", "'unsafe-inline'"],
imgSrc: ["'self'", "data:", "https:"],
fontSrc: ["'self'", "data:"],
objectSrc: ["'none'"],
baseUri: ["'self'"],
formAction: ["'self'"],
frameAncestors: ["'none'"],
upgradeInsecureRequests: [],
},
},
hsts: {
maxAge: 63072000,
includeSubDomains: true,
preload: true,
},
frameguard: {
action: 'sameorigin',
},
xssFilter: true,
noSniff: true,
referrerPolicy: {
policy: 'strict-origin-when-cross-origin',
},
permissionsPolicy: {
features: {
camera: ["'none'"],
microphone: ["'none'"],
geolocation: ["'none'"],
},
},
}))
// CORS configuration (if needed)
const cors = require('cors')
app.use(cors({
origin: process.env.ALLOWED_ORIGINS?.split(',') || 'http://localhost:3000',
credentials: true,
methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
allowedHeaders: ['Content-Type', 'Authorization'],
}))
app.listen(3000)
nginx
Create or update nginx configuration:
# Security headers configuration
# Add this to your server block or http block
server {
listen 443 ssl http2;
server_name example.com;
# SSL configuration
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
# Security Headers
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
# Content Security Policy
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data:; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests;" always;
# CORS (if needed)
add_header Access-Control-Allow-Origin "$http_origin" always;
add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always;
add_header Access-Control-Allow-Headers "Authorization, Content-Type" always;
add_header Access-Control-Allow-Credentials "true" always;
# Handle OPTIONS preflight
if ($request_method = 'OPTIONS') {
return 204;
}
location / {
# Your app configuration
proxy_pass http://localhost:3000;
}
}
# Redirect HTTP to HTTPS
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
Apache (.htaccess)
Create or update .htaccess:
# Security Headers
# Force HTTPS
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
# HTTP Strict Transport Security
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
</IfModule>
# X-Frame-Options
<IfModule mod_headers.c>
Header always set X-Frame-Options "SAMEORIGIN"
</IfModule>
# X-Content-Type-Options
<IfModule mod_headers.c>
Header always set X-Content-Type-Options "nosniff"
</IfModule>
# X-XSS-Protection
<IfModule mod_headers.c>
Header always set X-XSS-Protection "1; mode=block"
</IfModule>
# Referrer Policy
<IfModule mod_headers.c>
Header always set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule>
# Permissions Policy
<IfModule mod_headers.c>
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
</IfModule>
# Content Security Policy
<IfModule mod_headers.c>
Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data:; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests;"
</IfModule>
# CORS (if needed)
<IfModule mod_headers.c>
Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
Header always set Access-Control-Allow-Headers "Authorization, Content-Type"
</IfModule>
Flask/Python
from flask import Flask
from flask_talisman import Talisman
app = Flask(__name__)
# Configure security headers with Talisman
csp = {
'default-src': "'self'",
'script-src': ["'self'", "'unsafe-inline'", "'unsafe-eval'"],
'style-src': ["'self'", "'unsafe-inline'"],
'img-src': ["'self'", "data:", "https:"],
'font-src': ["'self'", "data:"],
'object-src': "'none'",
'base-uri': "'self'",
'form-action': "'self'",
'frame-ancestors': "'none'",
'upgrade-insecure-requests': True,
}
Talisman(app,
force_https=True,
strict_transport_security=True,
strict_transport_security_max_age=63072000,
strict_transport_security_include_subdomains=True,
content_security_policy=csp,
content_security_policy_nonce_in=['script-src'],
frame_options='SAMEORIGIN',
frame_options_allow_from=None,
referrer_policy='strict-origin-when-cross-origin',
x_content_type_options=True,
x_xss_protection=True,
)
# CORS configuration (if needed)
from flask_cors import CORS
CORS(app,
origins=["http://localhost:3000"],
methods=["GET", "POST", "PUT", "DELETE", "OPTIONS"],
allow_headers=["Content-Type", "Authorization"],
supports_credentials=True,
)
@app.route('/')
def index():
return 'Hello with secure headers!'
if __name__ == '__main__':
app.run()
Install dependencies:
pip install flask-talisman flask-cors
Django
# settings.py
# Security Headers Middleware (built-in)
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
# ... other middleware
]
# Security Settings
SECURE_SSL_REDIRECT = True
SECURE_HSTS_SECONDS = 63072000
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_BROWSER_XSS_FILTER = True
X_FRAME_OPTIONS = 'SAMEORIGIN'
SECURE_REFERRER_POLICY = 'strict-origin-when-cross-or
---
*Content truncated.*
When not to use it
- →For non-web application security configurations
Prerequisites
Limitations
- →Requires manual audit of generated headers before production deployment
How it compares
It automates the generation of framework-specific security policies instead of requiring manual header implementation.
Compared to similar skills
security-header-generator side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| security-header-generator (this skill) | 5 | 9mo | Caution | Intermediate |
| backend-security-coder | 24 | 4mo | No flags | Intermediate |
| backend-development | 0 | 5mo | No flags | Advanced |
| security-best-practices | 7 | 6mo | No flags | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by Dexploarer
View all by Dexploarer →You might also like
backend-security-coder
sickn33
Expert in secure backend coding practices specializing in input validation, authentication, and API security. Use PROACTIVELY for backend security implementations or security code reviews.
backend-development
hoadh
Build backends with Node.js, Python, Go (NestJS, FastAPI, Django). Use for REST/GraphQL/gRPC APIs, auth (OAuth, JWT), databases, microservices, security (OWASP), Docker/K8s.
security-best-practices
openai
Perform language and framework specific security best-practice reviews and suggest improvements. Trigger only when the user explicitly requests security best practices guidance, a security review/report, or secure-by-default coding help. Trigger only for supported languages (python, javascript/typescript, go). Do not trigger for general code review, debugging, or non-security tasks.
dependency-auditor
alirezarezvani
Check dependencies for known vulnerabilities using npm audit, pip-audit, etc. Use when package.json or requirements.txt changes, or before deployments. Alerts on vulnerable dependencies. Triggers on dependency file changes, deployment prep, security mentions.
command-injection-testing
Ed1s0nZ
命令注入漏洞测试的专业技能和方法论
sentry-data-handling
jeremylongshore
Manage sensitive data properly in Sentry. Use when configuring PII scrubbing, data retention, GDPR compliance, or data security settings. Trigger with phrases like "sentry pii", "sentry gdpr", "sentry data privacy", "scrub sensitive data sentry".