Communitygithub.com

Sicherheitsüberprüfung

Verwenden Sie diese Fähigkeit beim Hinzufügen von Authentifizierung, Verarbeiten von Benutzereingaben, Arbeiten mit Geheimnissen, Erstellen von API-Endpunkten oder Implementieren von Zahlungs-/sensiblen Funktionen. Bietet eine umfassende Sicherheits-Checkliste und -Muster.

Was ist Sicherheitsüberprüfung?

Die Sicherheitsüberprüfungsfähigkeit ist ein unverzichtbares Werkzeug für Entwickler, die Code schreiben, der mit sensiblen Daten, Authentifizierung, API-Endpunkten oder Zahlungen umgeht. Sie bietet eine detaillierte Checkliste und konkrete Codebeispiele, um häufige Sicherheitslücken wie hartcodierte Geheimnisse, SQL-Injection, XSS, CSRF, unsichere Token-Speicherung und unzureichende Eingabevalidierung zu vermeiden. Die Fähigkeit unterstützt mehrere Plattformen und Frameworks, darunter Next.js, Supabase und Solana (Blockchain), und zeigt sowohl unsichere („FAIL“) als auch sichere („PASS“) Implementierungsmuster. Entwickler können damit bei der Codeerstellung automatisch Sicherheitsaspekte prüfen und sicherstellen, dass bewährte Verfahren wie parametrisierte Abfragen, httpOnly-Cookies, Content Security Policies, Ratelimiting und RLS (Row Level Security) eingehalten werden. Sie ist ideal für Pre-Deployment-Reviews, Code-Generierung und Sicherheitstests im Entwicklungszyklus.

Funktioniert mit~Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/affaan-m/everything-claude-code/tree/main/skills/security-review

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Fähigkeit: Sicherheitsüberprüfung

Diese Fähigkeit stellt sicher, dass der gesamte Code den Sicherheitsbest Practices folgt und potenzielle Schwachstellen identifiziert.

Wann aktivieren

  • Implementierung von Authentifizierung oder Autorisierung
  • Verarbeitung von Benutzereingaben oder Datei-Uploads
  • Erstellen neuer API-Endpunkte
  • Arbeiten mit Geheimnissen oder Anmeldeinformationen
  • Implementierung von Zahlungsfunktionen
  • Speichern oder Übertragen sensibler Daten
  • Integration von Drittanbieter-APIs

Sicherheits-Checkliste

1. Geheimnisverwaltung

FEHLER: NIEMALS so machen

const apiKey = "sk-proj-xxxxx"  // Hartcodiertes Geheimnis
const dbPassword = "password123" // Im Quellcode

BESTANDEN: IMMER so machen

const apiKey = process.env.OPENAI_API_KEY
const dbUrl = process.env.DATABASE_URL

// Überprüfen, ob Geheimnisse vorhanden sind
if (!apiKey) {
  throw new Error('OPENAI_API_KEY nicht konfiguriert')
}

Überprüfungsschritte

  • Keine hartcodierten API-Schlüssel, Token oder Passwörter
  • Alle Geheimnisse in Umgebungsvariablen
  • .env.local in .gitignore
  • Keine Geheimnisse im Git-Verlauf
  • Produktionsgeheimnisse auf der Hosting-Plattform (Vercel, Railway)

2. Eingabevalidierung

Immer Benutzereingaben validieren

import { z } from 'zod'

// Validierungsschema definieren
const CreateUserSchema = z.object({
  email: z.string().email(),
  name: z.string().min(1).max(100),
  age: z.number().int().min(0).max(150)
})

// Vor der Verarbeitung validieren
export async function createUser(input: unknown) {
  try {
    const validated = CreateUserSchema.parse(input)
    return await db.users.create(validated)
  } catch (error) {
    if (error instanceof z.ZodError) {
      return { success: false, errors: error.issues }
    }
    throw error
  }
}

Datei-Upload-Validierung

function validateFileUpload(file: File) {
  // Größenprüfung (max. 5 MB)
  const maxSize = 5 * 1024 * 1024
  if (file.size > maxSize) {
    throw new Error('Datei zu groß (max. 5 MB)')
  }

  // Typ-Prüfung
  const allowedTypes = ['image/jpeg', 'image/png', 'image/gif']
  if (!allowedTypes.includes(file.type)) {
    throw new Error('Ungültiger Dateityp')
  }

  // Erweiterungsprüfung
  const allowedExtensions = ['.jpg', '.jpeg', '.png', '.gif']
  const extension = file.name.toLowerCase().match(/\.[^.]+$/)?.[0]
  if (!extension || !allowedExtensions.includes(extension)) {
    throw new Error('Ungültige Dateierweiterung')
  }

  return true
}

Überprüfungsschritte

  • Alle Benutzereingaben mit Schemata validiert
  • Datei-Uploads eingeschränkt (Größe, Typ, Erweiterung)
  • Keine direkte Verwendung von Benutzereingaben in Abfragen
  • Whitelist-Validierung (keine Blacklist)
  • Fehlermeldungen geben keine sensiblen Informationen preis

3. SQL-Injection-Prävention

FEHLER: NIEMALS SQL verketten

// GEFÄHRLICH - SQL-Injection-Schwachstelle
const query = `SELECT * FROM users WHERE email = '${userEmail}'`
await db.query(query)

BESTANDEN: IMMER parametrisierte Abfragen verwenden

// Sicher - parametrisierte Abfrage
const { data } = await supabase
  .from('users')
  .select('*')
  .eq('email', userEmail)

// Oder mit rohem SQL
await db.query(
  'SELECT * FROM users WHERE email = $1',
  [userEmail]
)

Überprüfungsschritte

  • Alle Datenbankabfragen verwenden parametrisierte Abfragen
  • Keine Zeichenkettenverkettung in SQL
  • ORM/Query-Builder korrekt verwendet
  • Supabase-Abfragen ordnungsgemäß bereinigt

4. Authentifizierung & Autorisierung

JWT-Token-Handling

// FEHLER: FALSCH: localStorage (anfällig für XSS)
localStorage.setItem('token', token)

// BESTANDEN: RICHTIG: httpOnly-Cookies
res.setHeader('Set-Cookie',
  `token=${token}; HttpOnly; Secure; SameSite=Strict; Max-Age=3600`)

Autorisierungsprüfungen

export async function deleteUser(userId: string, requesterId: string) {
  // IMMER zuerst die Autorisierung überprüfen
  const requester = await db.users.findUnique({
    where: { id: requesterId }
  })

  if (requester.role !== 'admin') {
    return NextResponse.json(
      { error: 'Nicht autorisiert' },
      { status: 403 }
    )
  }

  // Mit Löschung fortfahren
  await db.users.delete({ where: { id: userId } })
}

Zeilen-Sicherheit (Supabase)

-- RLS für alle Tabellen aktivieren
ALTER TABLE users ENABLE ROW LEVEL SECURITY;

-- Benutzer können nur ihre eigenen Daten anzeigen
CREATE POLICY "Benutzer sehen eigene Daten"
  ON users FOR SELECT
  USING (auth.uid() = id);

-- Benutzer können nur ihre eigenen Daten aktualisieren
CREATE POLICY "Benutzer aktualisieren eigene Daten"
  ON users FOR UPDATE
  USING (auth.uid() = id);

Überprüfungsschritte

  • Token in httpOnly-Cookies gespeichert (nicht localStorage)
  • Autorisierungsprüfungen vor sensiblen Vorgängen
  • Zeilen-Sicherheit in Supabase aktiviert
  • Rollenbasierte Zugriffskontrolle implementiert
  • Sitzungsverwaltung sicher

5. XSS-Prävention

HTML bereinigen

import DOMPurify from 'isomorphic-dompurify'

// IMMER benutzerbereitgestelltes HTML bereinigen
function renderUserContent(html: string) {
  const clean = DOMPurify.sanitize(html, {
    ALLOWED_TAGS: ['b', 'i', 'em', 'strong', 'p'],
    ALLOWED_ATTR: []
  })
  return <div dangerouslySetInnerHTML={{ __html: clean }} />
}

Content Security Policy

Beginnen Sie streng und lockern Sie nur mit einem dokumentierten Entfernungsplan. Verwenden Sie nicht standardmäßig 'unsafe-inline' oder 'unsafe-eval'; sie neutralisieren einen Großteil des CSP-Schutzes und sollten als vorübergehende Kompatibilitätsschuld behandelt werden.

// next.config.js
const securityHeaders = [
  {
    key: 'Content-Security-Policy',
    value: `
      default-src 'self';
      base-uri 'self';
      object-src 'none';
      frame-ancestors 'none';
      script-src 'self';
      style-src 'self';
      img-src 'self' data: https:;
      font-src 'self';
      connect-src 'self' https://api.example.com;
    `.replace(/\s{2,}/g, ' ').trim()
  }
]

Überprüfungsschritte

  • Benutzerbereitgestelltes HTML bereinigt
  • CSP-Header konfiguriert
  • Keine unvalidierte dynamische Inhaltsdarstellung
  • Reagierender integrierter XSS-Schutz verwendet

6. CSRF-Schutz

CSRF-Token

import { csrf } from '@/lib/csrf'

export async function POST(request: Request) {
  const token = request.headers.get('X-CSRF-Token')

  if (!csrf.verify(token)) {
    return NextResponse.json(
      { error: 'Ungültiges CSRF-Token' },
      { status: 403 }
    )
  }

  // Anfrage verarbeiten
}

SameSite-Cookies

res.setHeader('Set-Cookie',
  `session=${sessionId}; HttpOnly; Secure; SameSite=Strict`)

Überprüfungsschritte

  • CSRF-Tokens bei zustandsändernden Vorgängen
  • SameSite=Strict bei allen Cookies
  • Double-Submit-Cookie-Muster implementiert

7. Ratenbegrenzung

API-Ratenbegrenzung

import rateLimit from 'express-rate-limit'

const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 Minuten
  max: 100, // 100 Anfragen pro Fenster
  message: 'Zu viele Anfragen'
})

// Auf Routen anwenden
app.use('/api/', limiter)

Teure Vorgänge

// Aggressive Ratenbegrenzung für Suchvorgänge
const searchLimiter = rateLimit({
  windowMs: 60 * 1000, // 1 Minute
  max: 10, // 10 Anfragen pro Minute
  message: 'Zu viele Suchanfragen'
})

app.use('/api/search', searchLimiter)

Überprüfungsschritte

  • Ratenbegrenzung auf allen API-Endpunkten
  • Strengere Grenzwerte für teure Vorgänge
  • IP-basierte Ratenbegrenzung
  • Benutzerbasierte Ratenbegrenzung (authentifiziert)

8. Schutz sensibler Daten

Protokollierung

// FEHLER: FALSCH: Protokollierung sensibler Daten
console.log('Benutzeranmeldung:', { email, password })
console.log('Zahlung:', { cardNumber, cvv })

// BESTANDEN: RICHTIG: sensible Daten schwärzen
console.log('Benutzeranmeldung:', { email, userId })
console.log('Zahlung:', { last4: card.last4, userId })

Fehlermeldungen

// FEHLER: FALSCH: Interne Details offenlegen
catch (error) {
  return NextResponse.json(
    { error: error.message, stack: error.stack },
    { status: 500 }
  )
}

// BESTANDEN: RICHTIG: generische Fehlermeldungen
catch (error) {
  console.error('Interner Fehler:', error)
  return NextResponse.json(
    { error: 'Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut.' },
    { status: 500 }
  )
}

Überprüfungsschritte

  • Keine Passwörter, Token oder Geheimnisse in Protokollen
  • Fehlermeldungen generisch für Benutzer
  • Detaillierte Fehler nur in Serverprotokollen
  • Keine Stack-Traces, die Benutzern angezeigt werden

9. Blockchain-Sicherheit (Solana)

Wallet-Verifizierung

import { verify } from '@solana/web3.js'

async function verifyWalletOwnership(
  publicKey: string,
  signature: string,
  message: string
) {
  try {
    const isValid = verify(
      Buffer.from(message),
      Buffer.from(signature, 'base64'),
      Buffer.from(publicKey, 'base64')
    )
    return isValid
  } catch (error) {
    return false
  }
}

Transaktionsverifizierung

async function verifyTransaction(transaction: Transaction) {
  // Empfänger überprüfen
  if (transaction.to !== expectedRecipient) {
    throw new Error('Ungültiger Empfänger')
  }

  // Betrag überprüfen
  if (transaction.amount > maxAmount) {
    throw new Error('Betrag überschreitet Grenzwert')
  }

  // Überprüfen, ob der Benutzer ausreichend Guthaben hat
  const balance = await getBalance(transaction.from)
  if (balance < transaction.amount) {
    throw new Error('Nicht ausreichend Guthaben')
  }

  return true
}

Überprüfungsschritte

  • Wallet-Signaturen verifiziert
  • Transaktionsdetails validiert
  • Guthabenprüfungen vor Transaktionen
  • Kein blindes Transaktionssignieren

10. Abhängigkeitssicherheit

Regelmäßige Aktualisierungen

# Auf Schwachstellen prüfen
npm audit

# Automatisch behebbare Probleme beheben
npm audit fix

# Abhängigkeiten aktualisieren
npm update

# Auf veraltete Pakete prüfen
npm outdated

Sperrdateien

# IMMER Sperrdateien committen
git add package-lock.json

# In CI/CD für reproduzierbare Builds verwenden
npm ci  # Statt npm install

Überprüfungsschritte

  • Abhängigkeiten aktuell
  • Keine bekannten Schwachstellen (npm audit sauber)
  • Sperrdateien committet
  • Dependabot auf GitHub aktiviert
  • Regelmäßige Sicherheitsupdates

Sicherheitstests

Automatisierte Sicherheitstests

// Authentifizierung testen
test('erfordert Authentifizierung', async () => {
  const response = await fetch('/api/protected')
  expect(response.status).toBe(401)
})

// Autorisierung testen
test('erfordert Admin-Rolle', async () => {
  const response = await fetch('/api/admin', {
    headers: { Authorization: `Bearer ${userToken}` }
  })
  expect(response.status).toBe(403)
})

// Eingabevalidierung testen
test('lehnt ungültige Eingabe ab', async () => {
  const response = await fetch('/api/users', {
    method: 'POST',
    body: JSON.stringify({ email: 'not-an-email' })
  })
  expect(response.status).toBe(400)
})

// Ratenbegrenzung testen
test('erzwingt Ratenbegrenzung', async () => {
  const requests = Array(101).fill(null).map(() =>
    fetch('/api/endpoint')
  )

  const responses = await Promise.all(requests)
  const tooManyRequests = responses.filter(r => r.status === 429)

  expect(tooManyRequests.length).toBeGreaterThan(0)
})

Pre-Deployment-Sicherheitscheckliste

VOR jeder Produktionsbereitstellung:

  • Geheimnisse: Keine hartcodierten Geheimnisse, alle in Umgebungsvariablen
  • Eingabevalidierung: Alle Benutzereingaben validiert
  • SQL-Injection: Alle Abfragen parametrisiert
  • XSS: Benutzerinhalte bereinigt
  • CSRF: Schutz aktiviert
  • Authentifizierung: Korrektes Token-Handling
  • Autorisierung: Rollenprüfungen vorhanden
  • Ratenbegrenzung: Auf allen Endpunkten aktiviert
  • HTTPS: In der Produktion erzwungen
  • Sicherheitsheader: CSP, X-Frame-Options konfiguriert
  • Fehlerbehandlung: Keine sensiblen Daten in Fehlern
  • Protokollierung: Keine sensiblen Daten protokolliert
  • Abhängigkeiten: Aktuell, keine Schwachstellen
  • Zeilen-Sicherheit: In Supabase aktiviert
  • CORS: Ordentlich konfiguriert
  • Datei-Uploads: Validierte (Größe, Typ)
  • Wallet-Signaturen: Verifiziert (falls Blockchain)

Ressourcen


Denken Sie daran: Sicherheit ist optional. Eine Schwachstelle kann die gesamte Plattform gefährden. Im Zweifelsfall lieber auf Nummer sicher gehen.

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

accessibility

Design, implement, and audit inclusive digital products using WCAG 2.2 Level AA. Use when building or auditing UI that must meet WCAG 2.2 Level AA, or when reviewing a change for keyboard, contrast, or screen-reader support.

affaan-m/claude-api

Anthropic Claude API patterns for Python and TypeScript. Covers Messages API, streaming, tool use, vision, extended thinking, batches, prompt caching, and Claude Agent SDK. Use when building applications with the Claude API or Anthropic SDKs.

affaan-m/everything-claude-code

End-to-end marketing campaign planning and execution. Covers audience research, positioning, campaign angle definition, landing page copy, email sequences, social posts, ad copy, short-form video scripts, and content calendars. Use as the orchestration layer for multi-channel product launches. Use when planning or executing a multi-channel product launch, or producing landing page, email, social, or ad copy.

affaan-m/everything-claude-code

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/everything-claude-code-conventions

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/frontend-design

Create distinctive, production-grade frontend interfaces with high design quality. Use when the user asks to build web components, pages, or applications and the visual direction matters as much as the code quality.

affaan-m/gget

gget CLI and Python workflow for quick genomic database queries, sequence lookup, BLAST-style searches, enrichment checks, and reproducible bioinformatics evidence logs.

affaan-m/literature-review

Systematic literature-review workflow for academic, biomedical, technical, and scientific topics, including search planning, source screening, synthesis, citation checks, and evidence logging.

affaan-m/motion-ui

Production-ready UI motion system for React/Next.js. Use when implementing animations, transitions, or motion patterns.

affaan-m/project-guidelines-example

Example project-specific skill template based on a real production application.

affaan-m/pubmed-database

Direct PubMed and NCBI E-utilities search workflows for biomedical literature, MeSH queries, PMID lookup, citation retrieval, and API-backed literature monitoring.

affaan-m/scholar-evaluation

Structured scholarly-work evaluation for papers, proposals, literature reviews, methods sections, evidence quality, citation support, and research-writing feedback.

affaan-m/uspto-database

USPTO patent and trademark data workflow for official record lookup, PatentSearch queries, TSDR checks, assignment data, and reproducible IP research logs.

agent-architecture-audit

Full-stack diagnostic for agent and LLM applications. Audits the 12-layer agent stack for wrapper regression, memory pollution, tool discipline failures, hidden repair loops, and rendering corruption. Produces severity-ranked findings with code-first fixes. Essential for developers building agent applications, autonomous loops, or any LLM-powered feature. Use when an agent or LLM feature misbehaves and the failing layer is unknown, or before shipping an agent stack.

agent-eval

Head-to-head comparison of coding agents (Claude Code, Aider, Codex, etc.) on custom tasks with pass rate, cost, time, and consistency metrics. Use when choosing between coding agents, or when a change to an agent setup needs measured pass rate, cost, and time rather than an impression.

agent-harness-construction

Design and optimize AI agent action spaces, tool definitions, and observation formatting for higher completion rates. Use when defining or revising an agent

agentic-engineering

Operate as an agentic engineer using eval-first execution, decomposition, and cost-aware model routing. Use when planning or executing engineering work that agents will carry out end to end.

agentic-os

Build persistent multi-agent operating systems on Claude Code. Covers kernel architecture, specialist agents, slash commands, file-based memory, scheduled automation, and state management without external databases. Use when building a persistent multi-agent system on Claude Code with its own memory, commands, and scheduling.

agent-introspection-debugging

Structured self-debugging workflow for AI agent failures using capture, diagnosis, contained recovery, and introspection reports. Use when an agent run fails and you need a reproducible diagnosis instead of a retry.

agent-payment-x402

Add x402 payment execution to AI agents with per-task budgets, spending controls, and non-custodial wallets. Supports Base through agentwallet-sdk and X Layer through OKX Payments / OKX Agent Payments Protocol. Use when an agent must pay for something itself and needs per-task budgets, spending controls, and a non-custodial wallet.

Verwandte Skills