149 lines
3.5 KiB
Markdown
149 lines
3.5 KiB
Markdown
---
|
|
name: semgrep-security
|
|
description: 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
|
|
bash install-semgrep.sh
|
|
```
|
|
|
|
### Scan durchfuehren
|
|
```bash
|
|
# Alle Dateien scannen
|
|
bash scan.sh
|
|
|
|
# Nur bestimmte Dateien scannen
|
|
bash scan.sh app/api/users/route.ts components/UserForm.tsx
|
|
```
|
|
|
|
### Autofix anwenden
|
|
```bash
|
|
bash autofix.sh
|
|
```
|
|
|
|
## Workflow nach Implementierung
|
|
|
|
### 1. Installation sicherstellen
|
|
```bash
|
|
# Pruefen ob semgrep installiert ist
|
|
which semgrep || bash install-semgrep.sh
|
|
```
|
|
|
|
### 2. Geaenderte Dateien ermitteln
|
|
```bash
|
|
# Untracked und modified files
|
|
git status --porcelain | grep -E '^\?\?|^ M|^M' | cut -c4-
|
|
```
|
|
|
|
### 3. Security Scan ausfuehren
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# Mit Autofix
|
|
semgrep --config=auto --autofix .
|
|
|
|
# Nur Report ohne Fix
|
|
semgrep --config=auto --sarif -o results.sarif .
|
|
```
|
|
|
|
## Haeufige Security Issues und Fixes
|
|
|
|
### SQL Injection
|
|
```typescript
|
|
// SCHLECHT
|
|
const query = `SELECT * FROM users WHERE id = ${userId}`;
|
|
|
|
// GUT
|
|
const { data } = await supabase.from('users').select('*').eq('id', userId);
|
|
```
|
|
|
|
### XSS (Cross-Site Scripting)
|
|
```typescript
|
|
// SCHLECHT
|
|
<div dangerouslySetInnerHTML={{ __html: userInput }} />
|
|
|
|
// GUT
|
|
<div>{sanitize(userInput)}</div>
|
|
```
|
|
|
|
### Hardcoded Secrets
|
|
```typescript
|
|
// SCHLECHT
|
|
const apiKey = "sk-1234567890";
|
|
|
|
// GUT
|
|
const apiKey = process.env.API_KEY;
|
|
```
|
|
|
|
### Insecure Direct Object Reference
|
|
```typescript
|
|
// 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:
|
|
|
|
```markdown
|
|
## 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
|