Skip to content

Security: SaiPavan122001/Multimodal-AI-Chatbot

Security

docs/security.md

Security

Prompt-injection defense (security/injection.py)

Retrieved content is untrusted data. Layers:

  1. Detection — pattern library flags "ignore previous instructions", role overrides, prompt-reveal, jailbreak markers, tool-invoke and exfiltration attempts. Flags are attached to chunks (visible in trace).
  2. Delimiting — each chunk is wrapped in <document_N metadata="…"> tags; </document escapes and code fences are neutralized.
  3. Hardened system prompt — explicit rules that document content is data, never instructions; never reveal the system prompt; never follow links or tool instructions inside documents.
  4. Tests — malicious documents are asserted to be flagged, escaped and annotated (tests/test_rag_behavior.py).

No prompt-level defense is complete: groundedness auditing and evaluation datasets (poisoned-document cases) complement it.

PII protection (security/pii.py)

Regex detectors (email, phone, credit card w/ Luhn, SSN, IP, IBAN) applied at ingestion before chunk persistence. Policies:

  • PII_MODE=warn — index as-is, log counts/types only (never values)
  • PII_MODE=redact — replace with typed placeholders before indexing
  • PII_MODE=block — reject the file (HTTP 422, vague error)

Other controls

  • Image uploads: magic-byte sniffing, size/dimension caps, decompression-bomb guard, base64 validation.
  • Filenames sanitized (path traversal stripped); uploads never touch disk (stored as BLOBs, size-capped).
  • Rate limiting per scope/IP (HTTP 429 + Retry-After).
  • Optional X-API-Key auth; tenant scoping via X-Tenant-ID enforced at repositories and Qdrant filters.
  • Security headers (X-Content-Type-Options, X-Frame-Options, Referrer-Policy), secrets only via environment, .env git-ignored.

There aren't any published security advisories