---
title: Securitate & Content Security Policy (CSP)
description: Standarde de securitate, profilul de igienizare DOMPurify și antetele recomandate CSP pentru instanțele VertiWiki.
tags: [vertiwiki, securitate, csp, dompurify, xss, romana]
---

# Securitate & Content Security Policy (CSP)

> For the complete documentation index and agent navigation, see [llms.txt](/llms.txt).

Deoarece VertiWiki rulează complet în browserul clientului și preia dinamic documente Markdown ce pot proveni din surse externe, prevenirea atacurilor de tip Cross-Site Scripting (XSS) reprezintă un principiu arhitectural fundamental.

---

## 🛡️ Modelul de Apărare Fără XSS

VertiWiki integrează mecanisme defensive la fiecare pas al procesării conținutului:

```mermaid
graph LR
    MD[Input Markdown Brut] --> Marked[Compilator Marked]
    Marked --> RawHTML[Șir HTML Intermediar]
    RawHTML --> DOMPurify[Profil Strict DOMPurify]
    DOMPurify --> SafeDOM[Arbore DOM Igienizat]
    SafeDOM --> Mount[Injectare în #verti-app]
```

### 1. Igienizare Strictă prin DOMPurify
Fiecare șir HTML generat de `marked` trece prin `DOMPurify.sanitize()` înainte de a fi montat:
- Toate tagurile `<script>`, `<object>`, `<embed>` și atributele de evenimente (`onload`, `onerror`) sunt eliminate.
- Diagramele SVG generate de Mermaid sunt procesate sub un profil controlat care permite nodurile structurale (`<foreignObject>`, `<style>`, `<path>`), blocând codul executabil inline.
- Elementele MathML necesare pentru KaTeX sunt conservate fără a expune vulnerabilități.

### 2. Validarea URL-urilor
Linkurile și imaginile sunt verificate prin `sanitizeUrl()`. Protocoalele nesigure (`javascript:`, `vbscript:`, `data:text/html`) sunt neutralizate.

### 3. Evadarea Contextuală HTML
Toate interpolările dinamice din interfață (rezultate căutare, breadcrumbs, mesaje 404) utilizează funcția `escapeHtml()` pentru a preveni atacurile DOM-based XSS.

### 4. Sandboxing pentru Iframe & Protocol de Prezentare
Tagurile brute `<iframe>` incluse în documentele Markdown sunt gestionate prin hook-urile DOMPurify din `src/core/parser.ts`. VertiWiki impune un atribut sandbox implicit strict și securizat:
```html
sandbox="allow-scripts allow-same-origin allow-popups allow-forms allow-presentation"
```
Această configurație omite în mod deliberat `allow-top-navigation`, împiedicând frame-urile terțe să deturneze fereastra principală a browserului (frame busting), permițând în același timp afișarea prezentărilor interactive și a conținutului multimedia prin `allow-presentation`. Atributele `sandbox` declarate explicit de autori sunt conservate.

### 5. Neutralizarea Schemelor de Scripturi în Ancore
Pe lângă igienizarea URL-urilor, nucleul de rutare din `src/core/router.ts` verifică toate etichetele de legătură (`<a>`). Orice legătură care încearcă să invoce scheme periculoase (`javascript:`, `vbscript:`) are atributul `href` eliminat instantaneu înainte de dispatch-ul în DOM.

---

## 🔒 Politica de Securitate a Conținutului (CSP Recomandat)

Pentru serverele de producție (Nginx, Cloudflare, Apache, Vercel), se recomandă configurarea următoarelor antete HTTP:

```http
Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com data:; img-src 'self' data: https:; connect-src 'self'; object-src 'none'; frame-ancestors 'none'; base-uri 'self';
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: geolocation=(), microphone=(), camera=()
```

> [!NOTE]
> Directiva `'unsafe-inline'` pentru `style-src` este necesară deoarece VertiWiki injectează proprietăți CSS personalizate dinamice pentru teme și evidențierea sintaxei.

---

## 🛑 Modelul de Amenințări & Sandboxing

| Vector de Amenințare | Atenuare în VertiWiki |
| :--- | :--- |
| **Redactare Markdown Malițioasă** | Curățarea strictă prin DOMPurify elimină toate etichetele și atributele neautorizate. |
| **Deturnare Iframe / Frame Busting** | Sandboxing-ul automat al etichetelor iframe omite `allow-top-navigation`. |
| **Execuție Scheme Scripturi** | Schemele `javascript:` și `vbscript:` sunt stripate din ancore direct de către router. |
| **Injectare în Rezultate Căutare** | Previzualizările MiniSearch sunt escapate riguros prin `escapeHtml()` înainte de randare. |
| **Zoom Accidental pe Badge-uri cu Link** | Modulul lightbox exclude imaginile încadrate în link-uri active (`:not(a img)`). |
| **Clickjacking / Încadrare Iframe** | Blocat prin antetele `X-Frame-Options: DENY` și CSP `frame-ancestors 'none'`. |
| **Sniffing Tip MIME** | Neutralizat prin antetul `X-Content-Type-Options: nosniff`. |
| **Exfiltrare Date via Telemetrie** | Scripturile de analiză pornesc doar dacă ID-urile sunt configurate explicit în `config.json`. |

---

## 🔗 Pașii Următori

- Vedeți rețetele de găzduire în [Runbook Operațional](../operations/runbook.md).
- Consultați metodele nucleului în [Referință API TypeScript](../reference/api.md).
