mcpField
S
security-protocol

security-protocol

github.com/noobygainsSecurity11558 installsUpdated 3d ago
Repository

About security-protocol

security-protocol is a secure-coding skill for developers handling external data and sensitive operations. It provides boundary-validation practices and guidance spanning access control, injection, secrets, and common web risks.

Key features

  1. 01Identify trust boundaries and validate inputs
  2. 02Check authorization and resource ownership
  3. 03Prevent injection in queries and commands
  4. 04Protect secrets and sensitive data
  5. 05Review common web security risks

Use cases

  1. 01Building endpoints that accept user input
  2. 02Working with queries, files, or system commands
  3. 03Handling authentication, authorization, or secrets

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/noobygains/godmode --skill security-protocol

After installing, type/security-protocolin Claude Code to confirm it loaded.

Details

From the project README

Security Protocol

Overview

Security is not a phase you bolt on. Every line of code is a security decision.

Core principle: Never trust data from outside your trust boundary. Validate at every boundary crossing.

No exceptions. No workarounds. No shortcuts.

The Prime Directive

NO EXTERNAL DATA REACHES A SYSTEM CALL, QUERY, OR OUTPUT WITHOUT VALIDATION AND SANITIZATION

When data crosses a trust boundary, it must be validated before consumption. This is absolute.

When to Use

Mandatory when writing code that:

  • Accepts user input (forms, URLs, headers, uploaded files)
  • Constructs database queries
  • Renders user-supplied content
  • Manages authentication or authorization
  • Handles secrets or credentials
  • Invokes external APIs
  • Manipulates file paths
  • Executes system commands
  • Sets HTTP response headers
  • Processes file uploads

This is not discretionary. Security awareness is woven into development, not applied afterward.

The Entry Protocol

BEFORE shipping ANY code that handles external data:

1. IDENTIFY: Where does data enter the system? (Trust boundary)
2. VALIDATE: Is input validated at the boundary?
3. SANITIZE: Is output encoded for its target context?
4. AUTHORIZE: Is access control verified before the action?
5. PROTECT: Are secrets, tokens, and keys managed safely?

Omit any step = vulnerability shipped

OWASP Top 10 Condensed Guide

A01: Broken Access Control

Every endpoint must verify: Can THIS user perform THIS action on THIS resource?

# VULNERABLE: Checks authentication but not authorization
GET /api/accounts/456/profile  # User 123 views user 456's private data

# SECURE: Verify resource ownership
if resource.owner_id != authenticated_user.id:
    return 403 Forbidden
VerificationMethod
AuthenticationIs the user who they claim to be?
AuthorizationIs this user permitted to perform this action?
Resource ownershipDoes this user own this specific resource?
Role enforcementServer-side role check; never trust client-provided role claims

Default posture: deny. If no explicit rule grants access, access is denied.

A02: Cryptographic Failures
Required PracticeProhibited Practice
bcrypt/scrypt/argon2 for password hashingMD5, SHA1, SHA256 for passwords
TLS everywhere (HTTPS)HTTP for anything sensitive
Cryptographically secure RNG for tokensMath.random() for security tokens
Encrypt sensitive data at restStore sensitive data in plaintext
Use established cryptographic librariesImplement custom cryptography
A03: Injection

Never concatenate external input into queries, commands, or templates.

Injection VectorPrevention
SQL injectionParameterized queries / prepared statements. Always.
NoSQL injectionType-check inputs; use ODM query builders
Command injectionAvoid shell execution. If unavoidable: allowlist arguments, never interpolate
LDAP injectionEscape special characters; use parameterized queries
Template injectionUse auto-escaping template engines
-- VULNERABLE: String concatenation
SELECT * FROM users WHERE email = '" + userInput + "'

-- SECURE: Parameterized query
SELECT * FROM users WHERE email = $1

This is non-negotiable. There is no scenario where string concatenation in queries is acceptable.

A04: Insecure Design
  • Enforce rate limiting on authentication endpoints
  • Use CAPTCHA or proof-of-work for account creation
  • Validate business logic constraints server-side (never client-side only)
  • Design for abuse scenarios, not just intended usage
A05: Security Misconfiguration
CheckpointAction
Default credentialsReplace all defaults before deployment
Debug featuresDisable debug mode, admin consoles, and verbose errors in production
Error verbosityNever expose stack traces, SQL errors, or internal paths to users
Directory listingDisable on all web servers
Security headersSet them (see Security Headers section)
CORS policyRestrict to specific origins; never * for credentialed requests
A06: Vulnerable Components
BEFORE adding any dependency:

1. Is it actively maintained? (Last commit within 6 months)
2. Are known vulnerabilities published? (npm audit, snyk, dependabot)
3. Is it widely adopted? (Download counts and stars are signals, not guarantees)
4. Is it actually necessary? (Do not add a dependency for a single utility function)

Execute npm audit / pip audit / cargo audit regularly. Remediate critical and high findings immediately.

A07: Authentication Failures
RequirementImplementation
Password storagebcrypt/scrypt/argon2 with unique salts
Session tokensCryptographically random, httpOnly, secure, sameSite flags
Brute-force protectionLock account after 5-10 consecutive failures
Multi-factor authenticationSupport TOTP minimum for sensitive applications
Password policyMinimum 8 characters; cross-reference against breach databases
Session lifecycleExpire sessions; invalidate on password change
A08: Data Integrity Failures
  • Verify integrity of software updates and CI/CD pipelines
  • Use signed artifacts and checksums
  • Never auto-deserialize untrusted data (no eval(), no pickle.loads() on user input)
A09: Logging and Monitoring Failures
LogNever Log
Authentication attempts (success and failure)Passwords or authentication tokens
Authorization denialsComplete credit card numbers
Input validation failuresPersonally identifiable information without purpose
System errorsEncryption keys or secrets
A10: Server-Side Request Forgery (SSRF)
  • Validate and allowlist URLs before server-side requests
  • Never allow users to control URLs for server-side fetches
  • Block requests to internal networks (169.254.x.x, 10.x.x.x, 127.x.x.x, 192.168.x.x)

Security Headers

Set these on every HTTP response:

Content-Security-Policy: default-src 'self'; script-src 'self'
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Strict-Transport-Security: max-age=31536000; includeSubDomains
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: camera=(), microphone=(), geolocation=()

Begin restrictive and relax only when a specific requirement demands it.

Secrets Management

NEVER:
- Embed secrets in source code
- Commit .env files to version control
- Write secrets to log output
- Transmit secrets in URL query parameters
- Store secrets in client-side code

ALWAYS:
- Use environment variables or dedicated secret managers
- Add .env to .gitignore BEFORE the first commit
- Rotate secrets on a defined schedule
- Use distinct secrets per environment
- Audit secret access

Input Validation Checklist

For every input field:

  • Type validated (string, number, email, URL)
  • Length constrained (minimum and maximum)
  • Format validated (regex for structured data)
  • Range checked (numbers, dates)
  • Allowlisted where possible (enum values, known options)
  • Sanitized for output context (HTML, SQL, shell)
  • File uploads: type verified by content inspection (not extension), size limited

Cognitive Traps

RationalizationTruth
"Internal tool, no attacker"Internal tools get compromised. Internal users make mistakes. Insider threats are real.
"We will add security later"Security is not a feature. Retrofitting it costs 10x more than building it in.
"The framework handles it"Frameworks have escape hatches. Know exactly what your framework does and does not protect.
"Input validation is excessive"Every injection attack in history started with unvalidated input.
"It is just a prototype"Prototypes become production systems. Secure from the beginning.
"Too complicated, slows development"Data breaches slow development permanently.
"Nobody would do that"Attackers do exactly that. Assume all input is hostile.

Guardrails -- HALT and Fix

  • String concatenation in SQL queries
  • eval() or exec() on user-provided data
  • Secrets in source code or committed configuration files
  • Missing authorization checks on endpoints
  • User input rendered without encoding
  • Wildcard * CORS policy with credentials
  • HTTP for anything involving authentication or sensitive data
  • Client-side-only validation without server-side counterpart
  • Disabled CSRF protection
  • Default credentials in deployed environments

Every item on this list is a security vulnerability. Remediate before shipping.

Integration

Complementary skills:

  • godmode:system-design -- Authentication strategy and data flow design
  • godmode:quality-enforcement -- Security checks as automated quality gates
  • godmode:completion-gate -- Security verification before shipping
  • godmode:test-first -- Write security-focused test cases

The Bottom Line

Trust boundary crossed -> validate input, sanitize output, verify authorization

No exceptions. No "we will add it later." Security ships with the code or the code does not ship.

Comments

Markdown supported