
Owasp Security
Ship and harden web apps by applying OWASP Top 10:2025, ASVS, and LLM/agent security checklists during implementation and code review.
Install
npx skills add https://github.com/agamm/claude-code-owasp --skill owasp-securityWhat is this skill?
- Quick-reference table for all OWASP Top 10:2025 categories with concrete prevention patterns
- Structured security code review checklist covering input, access control, crypto, logging, and exceptions
- Spans ASVS 5.0, OWASP LLM Top 10 (2025), and Agentic AI security (2026) for agent-built products
- Emphasizes deny-by-default access control, parameterized queries, TLS 1.2+, and Argon2/bcrypt for passwords
- Use during auth/authorization design, user-input handling, and any security discussion with your coding agent
Adoption & trust: 808 installs on skills.sh; 226 GitHub stars; 3/3 security scanners passed (skills.sh audits); trending (+100% hot-view momentum).
Recommended Skills
Journey fit
Canonical shelf is Ship because the skill is framed for vulnerability review and production-ready controls, even though teams invoke it while still writing code in Build. Security subphase matches OWASP/ASVS review checklists, auth/session guidance, and fail-closed handling—not generic testing or launch prep.
Common Questions / FAQ
Is Owasp Security safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.
SKILL.md
READMESKILL.md - Owasp Security
# OWASP Security Best Practices Skill 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 - [ ] All user input validated server-side - [ ] Using parameterized queries (not string concatenation) - [ ] Input length limits enforced - [ ] Allowlist validation preferred over denylist ### Authentication & Sessions - [ ] Passwords hashed with Argon2/bcrypt (not MD5/SHA1) - [ ] Session tokens have sufficient entropy (128+ bits) - [ ] Sessions invalidated on logout - [ ] MFA available for sensitive operations ### Access Control - [ ] Check for framework-level auth middleware (e.g., Next.js middleware.ts, proxy.ts, Express middleware) before flagging missing per-route auth - [ ] Authorization checked on every request - [ ] Using object references user cannot manipulate - [ ] Deny by default policy - [ ] Privilege escalation paths reviewed ### Data Protection - [ ] Sensitive data encrypted at rest - [ ] TLS for all data in transit - [ ] No sensitive data in URLs/logs - [ ] Secrets in environment/vault (not code) ### Error Handling - [ ] No stack traces exposed to users - [ ] Fail-closed on errors (deny, not allow) - [ ] All exceptions logged with context - [ ] Consistent error responses (no enumeration) ## Secure Code Patterns ### SQL Injection Prevention ```python # 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 ```python # UNSAFE os.system(f"convert {filename} output.png") # SAFE subprocess.run(["convert", filename, "output.png"], shell=False) ``` ### Password Storage ```python # UNSAFE hashlib.md5(password.encode()).hexdigest() # SAFE from argon2 import PasswordHasher PasswordHasher().hash(password) ``` ### Access Control ```python # 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 ```python # 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 ```python # UNSAFE - Fail-open def check_permission(user, resource): try: return auth_service.check(user, resource) except Exc