Skillshub nextjs-security
Core security standards for App Router and Server Actions. Use when securing Next.js App Router routes, Server Actions, or API endpoints. (triggers: app/**/actions.ts, middleware.ts, action, boundary, sanitize, auth, jose)
install
source · Clone the upstream repo
git clone https://github.com/ComeOnOliver/skillshub
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ComeOnOliver/skillshub "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/HoangNguyen0403/agent-skills-standard/nextjs-security" ~/.claude/skills/comeonoliver-skillshub-nextjs-security && rm -rf "$T"
manifest:
skills/HoangNguyen0403/agent-skills-standard/nextjs-security/SKILL.mdsource content
Next.js Security
Priority: P0 (CRITICAL)
Structure
app/ ├── lib/ │ └── validation.ts # Shared Zod schemas └── middleware.ts # Auth & Headers
Implementation Guidelines
- Next.js Middleware: Use
for edge-side authentication, role-based access control (RBAC), and enforcing Security Headers (e.g.,middleware.ts
,Content-Security-Policy (CSP)
).X-XSS-Protection - Server Actions: Always sanitize all inputs from
or JSON using Zod. Perform authentication checks (FormData
) inside every action to verify the caller.await auth() - Data Tainting: Use the
API (experimental_taint
) to ensure sensitive server objects (e.g., User withtaintObjectReference
) never leak into a Client Component.passwordHash - Route Handlers (
): Implement rate limiting to prevent brute-force or DoS attacks. Verify Origin/Referer headers to mitigate CSRF (Cross-Site Request Forgery).route.ts - Auth Tokens: strictly use
,HttpOnly
cookies withSecure
for session management. Never store tokens inSameSite: 'Lax'
.localStorage - Logic Isolation: use the
package to prevent backend-specific logic from being included in the client bundle.server-only - Component Purity: Escape all user-provided content rendered in components. Never use
without a sanitizer likedangerouslySetInnerHTML
.DOMPurify
Anti-Patterns
- No leaking DB fields to client: Use DTOs; never pass raw model objects.
- No
in client bundles: Mark asprocess.env
only if safe to expose.NEXT_PUBLIC_ - No unvalidated Server Action inputs: Always validate with Zod schema.
- No auth checks in shared Layouts: Auth in layouts is insecure; use Middleware.