Files
2025-12-23 04:19:57 +01:00

3.5 KiB

name, description
name description
semgrep-security Security Scanner mit Semgrep. WICHTIG - Dieser Skill wird automatisch bei JEDER Code-Implementierung aktiviert. Scannt neuen und geaenderten Code auf Sicherheitsluecken, Vulnerabilities und Best Practice Verstoesse. Aktiviert bei Begriffen wie "implementieren", "code schreiben", "feature erstellen", "komponente bauen", "funktion erstellen", "api route", "fertig", "done", "commit", "security", "scan", "vulnerabilities", "sicherheit".

Semgrep Security Scanner

Dieser Skill scannt automatisch Code auf Sicherheitsprobleme nach jeder Implementierung.

WICHTIG: Automatische Ausfuehrung

Nach JEDER Code-Implementierung fuehre folgende Schritte aus:

  1. Semgrep installieren (falls nicht vorhanden)
  2. Geaenderte Dateien scannen
  3. Probleme fixen oder reporten

Scripts

Installation pruefen und durchfuehren

bash install-semgrep.sh

Scan durchfuehren

# Alle Dateien scannen
bash scan.sh

# Nur bestimmte Dateien scannen
bash scan.sh app/api/users/route.ts components/UserForm.tsx

Autofix anwenden

bash autofix.sh

Workflow nach Implementierung

1. Installation sicherstellen

# Pruefen ob semgrep installiert ist
which semgrep || bash install-semgrep.sh

2. Geaenderte Dateien ermitteln

# Untracked und modified files
git status --porcelain | grep -E '^\?\?|^ M|^M' | cut -c4-

3. Security Scan ausfuehren

# Mit Auto-Config (empfohlen)
semgrep --config=auto --json .

# Fuer TypeScript/React spezifisch
semgrep --config=p/typescript --config=p/react --json .

# OWASP Top 10
semgrep --config=p/owasp-top-ten --json .

4. Ergebnisse analysieren und fixen

# Mit Autofix
semgrep --config=auto --autofix .

# Nur Report ohne Fix
semgrep --config=auto --sarif -o results.sarif .

Haeufige Security Issues und Fixes

SQL Injection

// SCHLECHT
const query = `SELECT * FROM users WHERE id = ${userId}`;

// GUT
const { data } = await supabase.from('users').select('*').eq('id', userId);

XSS (Cross-Site Scripting)

// SCHLECHT
<div dangerouslySetInnerHTML={{ __html: userInput }} />

// GUT
<div>{sanitize(userInput)}</div>

Hardcoded Secrets

// SCHLECHT
const apiKey = "sk-1234567890";

// GUT
const apiKey = process.env.API_KEY;

Insecure Direct Object Reference

// SCHLECHT - Keine Auth-Pruefung
const user = await getUser(req.query.id);

// GUT - Mit RLS oder Auth-Check
const { data: { user } } = await supabase.auth.getUser();
const profile = await supabase.from('profiles').select().eq('user_id', user.id);

Report Format

Nach jedem Scan zeige:

## Security Scan Ergebnisse

**Score**: 85/100

| Severity | Count |
|----------|-------|
| Critical | 0     |
| High     | 1     |
| Medium   | 3     |
| Low      | 5     |

### Gefundene Issues

1. **[HIGH] Potential XSS** in `components/Comment.tsx:42`
   - Problem: Unescaped user input
   - Fix: Verwende DOMPurify oder sanitize-html

### Automatisch gefixt
- 2 Issues wurden automatisch behoben

### Naechste Schritte
- [ ] Issue #1 manuell pruefen

Best Practices

  1. Immer scannen nach Code-Aenderungen
  2. Autofix nutzen fuer einfache Issues
  3. Kritische Issues sofort beheben
  4. False Positives in .semgrepignore ausschliessen
  5. CI/CD Integration fuer automatische Scans