Darstellung
PII-Scanner
Der KnowledgeValidator scannt hochgeladene Texte auf personenbezogene Daten (PII) bevor sie vektorisiert werden. Er warnt bei Funden, blockiert aber nicht — der Tenant entscheidet, ob trotzdem vektorisiert wird.
Verhalten
- Bei PII-Funden wird das Knowledge-Item auf
status: 'pending_review'gesetzt - Der Tenant sieht die Warnung im Dashboard und kann manuell freigeben
- Die KB Onboarding Checkliste markiert
pii_scan_passedundno_email_dumpsals nicht bestanden, solange Items mitpending_reviewexistieren - Keine PII-Daten werden in der Scan-Response zurückgegeben — nur Counts und Kategorien
Regex-Patterns
| Name | Label | Regex | Risk | Severity |
|---|---|---|---|---|
email | E-Mail-Adressen | [a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,} | Personenbezogene Daten | high |
iban | IBAN-Nummern | \b[A-Z]{2}\d{2}[A-Z0-9]{11,30}\b | Finanzdaten | high |
phone | Telefonnummern | \+\d{1,3}[\s-]?\d{3,15} | Kontaktdaten | medium |
email_header | E-Mail-Header (Dump-Erkennung) | \b(Von:|An:|Betreff:|Subject:|Forwarded|From:|To:|Sent:|Date:)\b | E-Mail-Dump erkannt | high |
credit_card | Kreditkarten-Nummern | \b\d{4}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{4}\b | Finanzdaten | critical |
Severity-Hierarchie
Die hoechste gefundene Severity bestimmt maxSeverity in der Response:
critical— Kreditkarten-Nummernhigh— E-Mail-Adressen, IBAN, E-Mail-Headermedium— Telefonnummernlow— Fallback (kein Pattern hat aktuell diese Severity)
Oversized-Check
Neben PII-Erkennung prueft der Scanner auch die geschaetzte Chunk-Anzahl:
estimatedChunks = Math.ceil(text.length / 500)
isOversized = estimatedChunks > 500Ein Dokument mit mehr als 500 geschaetzten Chunks wird als isOversized: true markiert.
Scan-Response
json
{
"clean": false,
"findings": [
{
"pattern": "email",
"label": "E-Mail-Adressen",
"count": 3,
"risk": "Personenbezogene Daten",
"severity": "high"
}
],
"totalFindings": 3,
"maxSeverity": "high",
"isOversized": false,
"estimatedChunks": 42,
"summary": "1 PII-Muster gefunden (3 Treffer). Hoechstes Risiko: high."
}Bei sauberem Scan:
json
{
"clean": true,
"findings": [],
"totalFindings": 0,
"maxSeverity": null,
"isOversized": false,
"estimatedChunks": 42,
"summary": null
}Integration in die Pipeline
Upload → TextExtractor → KnowledgeValidator.scan()
↓
clean=true → status='pending' → Vektorisierung
clean=false → status='pending_review' → Tenant-EntscheidungDer PII-Scanner ist in KnowledgeService.processDocument() integriert und läuft automatisch bei jedem Upload.