OWASP Security Standards
Apply these security standards when writing or reviewing code.
Quick Reference: OWASP Top 10:2025
| # |
Vulnerability |
Key Prevention |
| A01 |
Broken Access Control |
Deny by default, enforce server-side, verify ownership |
| A02 |
Security Misconfiguration |
Harden configs, disable defaults, minimize features |
| A03 |
Supply Chain Failures |
Lock versions, verify integrity, audit dependencies |
| A04 |
Cryptographic Failures |
TLS 1.2+, AES-256-GCM, Argon2/bcrypt for passwords |
| A05 |
Injection |
Parameterized queries, input validation, safe APIs |
| A06 |
Insecure Design |
Threat model, rate limit, design security controls |
| A07 |
Auth Failures |
MFA, check breached passwords, secure sessions |
| A08 |
Integrity Failures |
Sign packages, SRI for CDN, safe serialization |
| A09 |
Logging Failures |
Log security events, structured format, alerting |
| A10 |
Exception Handling |
Fail-closed, hide internals, log with context |
Security Code Review Checklist
When reviewing code, check for these issues:
Input Handling
Authentication & Sessions
Access Control
Data Protection
Error Handling
Secure Code Patterns
SQL Injection Prevention
# UNSAFE
cursor.execute(f"SELECT * FROM users WHERE id = {user_id}")
# SAFE
cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))
Command Injection Prevention
# UNSAFE
os.system(f"convert {filename} output.png")
# SAFE
subprocess.run(["convert", filename, "output.png"], shell=False)
Password Storage
# UNSAFE
hashlib.md5(password.encode()).hexdigest()
# SAFE
from argon2 import PasswordHasher
PasswordHasher().hash(password)
Access Control
# UNSAFE - No authorization check
@app.route('/api/user/<user_id>')
def get_user(user_id):
return db.get_user(user_id)
# SAFE - Authorization enforced
@app.route('/api/user/<user_id>')
@login_required
def get_user(user_id):
if current_user.id != user_id and not current_user.is_admin:
abort(403)
return db.get_user(user_id)
Error Handling
# UNSAFE - Exposes internals
@app.errorhandler(Exception)
def handle_error(e):
return str(e), 500
# SAFE - Fail-closed, log context
@app.errorhandler(Exception)
def handle_error(e):
error_id = uuid.uuid4()
logger.exception(f"Error {error_id}: {e}")
return {"error": "An error occurred", "id": str(error_id)}, 500
Fail-Closed Pattern
# UNSAFE - Fail-open
def check_permission(user, resource):
try:
return auth_service.check(user, resource)
except Exception:
return True # DANGEROUS!
# SAFE - Fail-closed
def check_permission(user, resource):
try:
return auth_service.check(user, resource)
except Exception as e:
logger.error(f"Auth check failed: {e}")
return False # Deny on error
ASVS 5.0 Key Requirements
Level 1 (All Applications)
- Passwords minimum 12 characters
- Check against breached password lists
- Rate limiting on authentication
- Session tokens 128+ bits entropy
- HTTPS everywhere
Level 2 (Sensitive Data)
- All L1 requirements plus:
- MFA for sensitive operations
- Cryptographic key management
- Comprehensive security logging
- Input validation on all parameters
Level 3 (Critical Systems)
- All L1/L2 requirements plus:
- Hardware security modules for keys
- Threat modeling documentation
- Advanced monitoring and alerting
- Penetration testing validation
Related Skills
- Language-specific security quirks: See
language-security skill for 20+ language-specific vulnerability patterns
- AI agent security: See
agentic-ai-security skill for OWASP Agentic AI Top 10 2026
- Full OWASP report: See
OWASP-2025-2026-Report.md in this directory for detailed descriptions of all categories
When to Apply This Skill
Use this skill when:
- Writing authentication or authorization code
- Handling user input or external data
- Implementing cryptography or password storage
- Reviewing code for security vulnerabilities
- Designing API endpoints
- Configuring application security settings
- Handling errors and exceptions
- Working with third-party dependencies
Source: AlexDevFlow/Claude10XD — distributed by TomeVault.
1---2name: owasp-security-standards3description: Use when reviewing code for security vulnerabilities, implementing authentication/authorization, handling user input, or discussing web application security. Covers OWASP Top 10:2025, ASVS 5.0, secure code patterns, and code review checklists. For language-specific quirks see language-security skill. For AI agent security see agentic-ai-security skill.4---56# OWASP Security Standards78Apply these security standards when writing or reviewing code.910## Quick Reference: OWASP Top 10:20251112| # | Vulnerability | Key Prevention |13|---|---------------|----------------|14| A01 | Broken Access Control | Deny by default, enforce server-side, verify ownership |15| A02 | Security Misconfiguration | Harden configs, disable defaults, minimize features |16| A03 | Supply Chain Failures | Lock versions, verify integrity, audit dependencies |17| A04 | Cryptographic Failures | TLS 1.2+, AES-256-GCM, Argon2/bcrypt for passwords |18| A05 | Injection | Parameterized queries, input validation, safe APIs |19| A06 | Insecure Design | Threat model, rate limit, design security controls |20| A07 | Auth Failures | MFA, check breached passwords, secure sessions |21| A08 | Integrity Failures | Sign packages, SRI for CDN, safe serialization |22| A09 | Logging Failures | Log security events, structured format, alerting |23| A10 | Exception Handling | Fail-closed, hide internals, log with context |2425## Security Code Review Checklist2627When reviewing code, check for these issues:2829### Input Handling30- [ ] All user input validated server-side31- [ ] Using parameterized queries (not string concatenation)32- [ ] Input length limits enforced33- [ ] Allowlist validation preferred over denylist3435### Authentication & Sessions36- [ ] Passwords hashed with Argon2/bcrypt (not MD5/SHA1)37- [ ] Session tokens have sufficient entropy (128+ bits)38- [ ] Sessions invalidated on logout39- [ ] MFA available for sensitive operations4041### Access Control42- [ ] Check for framework-level auth middleware (e.g., Next.js middleware.ts, proxy.ts, Express middleware) before flagging missing per-route auth43- [ ] Authorization checked on every request44- [ ] Using object references user cannot manipulate45- [ ] Deny by default policy46- [ ] Privilege escalation paths reviewed4748### Data Protection49- [ ] Sensitive data encrypted at rest50- [ ] TLS for all data in transit51- [ ] No sensitive data in URLs/logs52- [ ] Secrets in environment/vault (not code)5354### Error Handling55- [ ] No stack traces exposed to users56- [ ] Fail-closed on errors (deny, not allow)57- [ ] All exceptions logged with context58- [ ] Consistent error responses (no enumeration)5960## Secure Code Patterns6162### SQL Injection Prevention63```python64# UNSAFE65cursor.execute(f"SELECT * FROM users WHERE id = {user_id}")6667# SAFE68cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))69```7071### Command Injection Prevention72```python73# UNSAFE74os.system(f"convert {filename} output.png")7576# SAFE77subprocess.run(["convert", filename, "output.png"], shell=False)78```7980### Password Storage81```python82# UNSAFE83hashlib.md5(password.encode()).hexdigest()8485# SAFE86from argon2 import PasswordHasher87PasswordHasher().hash(password)88```8990### Access Control91```python92# UNSAFE - No authorization check93@app.route('/api/user/<user_id>')94def get_user(user_id):95 return db.get_user(user_id)9697# SAFE - Authorization enforced98@app.route('/api/user/<user_id>')99@login_required100def get_user(user_id):101 if current_user.id != user_id and not current_user.is_admin:102 abort(403)103 return db.get_user(user_id)104```105106### Error Handling107```python108# UNSAFE - Exposes internals109@app.errorhandler(Exception)110def handle_error(e):111 return str(e), 500112113# SAFE - Fail-closed, log context114@app.errorhandler(Exception)115def handle_error(e):116 error_id = uuid.uuid4()117 logger.exception(f"Error {error_id}: {e}")118 return {"error": "An error occurred", "id": str(error_id)}, 500119```120121### Fail-Closed Pattern122```python123# UNSAFE - Fail-open124def check_permission(user, resource):125 try:126 return auth_service.check(user, resource)127 except Exception:128 return True # DANGEROUS!129130# SAFE - Fail-closed131def check_permission(user, resource):132 try:133 return auth_service.check(user, resource)134 except Exception as e:135 logger.error(f"Auth check failed: {e}")136 return False # Deny on error137```138139## ASVS 5.0 Key Requirements140141### Level 1 (All Applications)142- Passwords minimum 12 characters143- Check against breached password lists144- Rate limiting on authentication145- Session tokens 128+ bits entropy146- HTTPS everywhere147148### Level 2 (Sensitive Data)149- All L1 requirements plus:150- MFA for sensitive operations151- Cryptographic key management152- Comprehensive security logging153- Input validation on all parameters154155### Level 3 (Critical Systems)156- All L1/L2 requirements plus:157- Hardware security modules for keys158- Threat modeling documentation159- Advanced monitoring and alerting160- Penetration testing validation161162## Related Skills163164- **Language-specific security quirks**: See `language-security` skill for 20+ language-specific vulnerability patterns165- **AI agent security**: See `agentic-ai-security` skill for OWASP Agentic AI Top 10 2026166- **Full OWASP report**: See `OWASP-2025-2026-Report.md` in this directory for detailed descriptions of all categories167168## When to Apply This Skill169170Use this skill when:171- Writing authentication or authorization code172- Handling user input or external data173- Implementing cryptography or password storage174- Reviewing code for security vulnerabilities175- Designing API endpoints176- Configuring application security settings177- Handling errors and exceptions178- Working with third-party dependencies179180---181> Source: [AlexDevFlow/Claude10XD](https://github.com/AlexDevFlow/Claude10XD) — distributed by [TomeVault](https://tomevault.io).182<!-- tomevault:4.0:skill_md:2026-05-22 -->