Comprehensive security checklist covering OWASP Top 10, SQL injection, XSS, CSRF, authentication, authorization, secrets management, input validation, and security headers. Use when scanning for vulnerabilities, reviewing security, implementing authentication/authorization, or handling sensitive data.
View on GitHubwebdevtodayjason/titanium-plugins
titanium-toolkit
January 21, 2026
Select agents to install to:
npx add-skill https://github.com/webdevtodayjason/titanium-plugins/blob/main/plugins/titanium-toolkit/skills/security-checklist/SKILL.md -a claude-code --skill security-checklistInstallation paths:
.claude/skills/security-checklist/# Security Checklist
This skill provides comprehensive security guidance to protect your applications from common vulnerabilities and attacks.
## OWASP Top 10 Vulnerabilities
### 1. Broken Access Control
**What it is**: Users can access resources or perform actions they shouldn't be authorized for.
**Examples**:
- Accessing another user's data by changing URL parameter
- Elevating privileges (user → admin)
- Bypassing authentication checks
**Prevention**:
```typescript
// ❌ BAD - No authorization check
app.get('/api/users/:id', async (req, res) => {
const user = await db.user.findUnique({ where: { id: req.params.id } });
res.json(user);
});
// ✅ GOOD - Verify ownership or admin
app.get('/api/users/:id', authenticate, async (req, res) => {
const requestedId = req.params.id;
const currentUserId = req.user.id;
const isAdmin = req.user.role === 'admin';
if (requestedId !== currentUserId && !isAdmin) {
return res.status(403).json({ error: 'Forbidden' });
}
const user = await db.user.findUnique({ where: { id: requestedId } });
res.json(user);
});
```
**Checklist**:
- [ ] Enforce least privilege (deny by default)
- [ ] Verify user permissions on every request
- [ ] Never trust user IDs from client
- [ ] Log access control failures
- [ ] Use centralized access control logic
### 2. Cryptographic Failures
**What it is**: Exposing sensitive data due to weak or missing encryption.
**Examples**:
- Storing passwords in plain text
- Using weak hashing algorithms (MD5, SHA1)
- Transmitting sensitive data over HTTP
**Prevention**:
```typescript
import bcrypt from 'bcrypt';
import crypto from 'crypto';
// ✅ Password hashing
async function hashPassword(password: string): Promise<string> {
const saltRounds = 12; // Increase for more security
return await bcrypt.hash(password, saltRounds);
}
async function verifyPassword(password: string, hash: string): Promise<boolean> {
return await bcrypt.compare(password, hash);
}
// ✅ Encrypt sensitive d