security-and-hardening
Apply security controls, threat modeling, and hardening to code and infrastructure
ソース情報
- リポジトリ
- vignesh2027/AI-AGENT-SKILLS
- ソースの最終更新活動
- 2026年5月13日 19:03
- 検出された SKILL.md の言語
- 英語
- スター
- 1
- フォーク
- 0
インストール方法
デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。
ソースファイルを確認
インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。
SKILL.md を表示中
SKILL.md
ソースの指示 · 読み取り専用プレビュー- name
- security-and-hardening
- description
- Apply security controls, threat modeling, and hardening to code and infrastructure
- difficulty
- senior
- domains
- ["general"]
## Overview
Security is not a feature you add — it is a property you maintain. Most security failures are not sophisticated attacks; they are missing input validation, exposed secrets, misconfigured permissions, and unpatched dependencies. This skill systematically eliminates these before they reach production.
## When to Use
- Before merging any PR that touches auth, data storage, user input, or external APIs
- When adding a new endpoint, form, or data type
- When setting up or modifying infrastructure
- As part of the `/review` workflow
## Process
### Step 1: Threat model the change
Ask: what can an attacker do with this change? What data does it touch? What systems does it connect to? Who has access? Threat model in 10 minutes with STRIDE:
- **S**poofing — Can someone impersonate a legitimate user?
- **T**ampering — Can someone modify data they shouldn't?
- **R**epudiation — Can someone deny they took an action?
- **I**nformation Disclosure — Can someone read data they shouldn't?
- **D**enial of Service — Can someone block legitimate access?
- **E**levation of Privilege — Can someone gain permissions they shouldn't have?
### Step 2: Input validation
- Validate all inputs at the boundary (before processing or storage)
- Validate type, length, format, and range
- Reject invalid inputs — don't sanitize and continue
- Parameterize all database queries (no string concatenation)
- Encode all outputs for their context (HTML, SQL, shell, JSON)
### Step 3: Authentication and authorization
- Verify authentication on every request (don't cache auth state across requests)
- Check authorization on every resource access (not just at the route level)
- Use principle of least privilege: request only the permissions you need
- Implement rate limiting on auth endpoints
- Ensure session tokens are invalidated on logout
### Step 4: Secrets management
- No secrets in code, commits, or logs
- Use environment variables or a secrets manager
- Rotate secrets after any exposure (assume exposure if committed to git)
- Verify: `git log --all -p | grep -i "password\|secret\|token\|key"` — if anything shows, rotate immediately
### Step 5: Dependency audit
- Run `npm audit`, `pip-audit`, or equivalent
- Address all high/critical CVEs before merging
- Pin dependency versions; use lock files
- Review new dependencies before adding them
### Step 6: Data handling
- Encrypt sensitive data at rest and in transit
- Never log PII, passwords, tokens, or credit card numbers
- Apply data minimization: only collect what you need
- Implement proper deletion (GDPR right-to-erasure)
- Separate authentication tokens from data queries in logs
### Step 7: Error handling
- Never expose stack traces or internal details to users
- Log errors server-side with context; return generic messages to clients
- Don't reveal whether a user exists on login failure ("Invalid credentials" not "User not found")
### Step 8: Headers and transport
- Set security headers: CSP, HSTS, X-Frame-Options, X-Content-Type-Options
- TLS everywhere; no HTTP
- No sensitive data in URLs or query parameters
## Anti-Rationalizations
**"This is an internal API — we don't need auth"**
Internal APIs are reached by internal attackers and misconfigured external clients. Every API needs auth.
**"We'll add security hardening after launch"**
Security retrofitted onto an insecure design is more expensive and less effective than security built in from the start.
**"The secret is only in the git history, not the current code"**
Git history is accessible to everyone who can clone the repo. Rotate the secret now.
## Verification Requirements
- [ ] STRIDE threat model completed for the change
- [ ] All user inputs validated at the boundary
- [ ] All database queries parameterized
- [ ] No secrets in code or commit history
- [ ] Authorization checked on every resource access
- [ ] Dependency audit passed (no high/critical CVEs)
- [ ] No PII in logs
- [ ] Security headers configured
- [ ] Error messages don't expose internals
GitHubで見る