home / skills / secondsky / claude-skills / api-security-hardening
/plugins/api-security-hardening/skills/api-security-hardening
This skill helps harden REST APIs by applying authentication, rate limiting, input validation, and security headers across routes for production security.
npx playbooks add skill secondsky/claude-skills --skill api-security-hardeningReview the files below or copy the command above to add this skill to your agents.
---
name: api-security-hardening
description: REST API security hardening with authentication, rate limiting, input validation, security headers. Use for production APIs, security audits, defense-in-depth, or encountering vulnerabilities, injection attacks, CORS issues.
---
# API Security Hardening
Protect REST APIs against common vulnerabilities with multiple security layers.
## Security Middleware Stack (Express)
```javascript
const helmet = require('helmet');
const rateLimit = require('express-rate-limit');
const mongoSanitize = require('express-mongo-sanitize');
const xss = require('xss-clean');
app.use(helmet());
app.use(mongoSanitize());
app.use(xss());
app.use('/api/', rateLimit({
windowMs: 15 * 60 * 1000,
max: 100
}));
app.use('/api/auth/', rateLimit({
windowMs: 15 * 60 * 1000,
max: 5
}));
```
## Input Validation
```javascript
const { body, validationResult } = require('express-validator');
app.post('/users',
body('email').isEmail().normalizeEmail(),
body('password').isLength({ min: 8 }).matches(/[A-Z]/).matches(/[0-9]/),
body('name').trim().escape().isLength({ max: 100 }),
(req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
// Process request
}
);
```
## Security Headers
```javascript
app.use((req, res, next) => {
res.setHeader('Content-Security-Policy', "default-src 'self'");
res.setHeader('X-Frame-Options', 'DENY');
res.setHeader('X-Content-Type-Options', 'nosniff');
res.setHeader('Strict-Transport-Security', 'max-age=31536000; includeSubDomains');
res.setHeader('X-XSS-Protection', '1; mode=block');
next();
});
```
## Security Checklist
- [ ] HTTPS everywhere
- [ ] Authentication on all protected routes
- [ ] Input validation and sanitization
- [ ] Rate limiting enabled
- [ ] Security headers configured
- [ ] CORS restricted to allowed origins
- [ ] No stack traces in production errors
- [ ] Audit logging enabled
- [ ] Dependencies regularly updated
## Additional Implementations
See [references/python-nginx.md](references/python-nginx.md) for:
- Python FastAPI security middleware
- Pydantic input validation with password rules
- Nginx SSL/TLS and security headers configuration
- HTTP Parameter Pollution prevention
## Never Do
- Trust user input without validation
- Return detailed errors in production
- Store secrets in code
- Use GET for state-changing operations
- Disable security for convenience
This skill hardens REST APIs by applying layered security controls including authentication, rate limiting, input validation, and strong security headers. It provides practical middleware patterns, validation rules, and a concise checklist to move APIs toward production readiness. Use it to reduce attack surface and enforce defense-in-depth across services.
The skill outlines a middleware stack that integrates common Express utilities (helmet, rate limiting, input sanitizers, XSS protection) and demonstrates route-level limits for sensitive endpoints. It shows concrete input validation rules using express-validator and illustrates explicit security headers and HSTS to protect clients and servers. A compact checklist and recommended ‘‘never do’’ rules guide secure operational practices and audits.
How do I choose rate limit values?
Start with conservative defaults (e.g., 100 requests per 15 minutes for general API, 5 per 15 minutes for auth endpoints) and adjust based on legitimate traffic patterns and monitoring.
Can these patterns be applied to frameworks other than Express?
Yes. The concepts—rate limiting, input validation, sanitization, and security headers—map to other frameworks like FastAPI, Django, or Spring; use their native middleware and validation libraries.