PDF-documentexport zet Markdown-URLs ongefilterd in AnnotationUrl #1642

Closed
opened 2026-08-21 11:59:01 +00:00 by brenno · 0 comments
Owner

Wat er misgaat

In de gezette document-PDF wordt elke link pw.AnnotationUrl(href.trim()) (lib/services/pdf/document_pdf_widgets.dart). Er is geen allowlist van schema's.

Gevolg: [tekst](javascript:…) of [tekst](file:///…) wordt een klikbare PDF-annotatie. file: staat niet in MarkdownSafetyScanner, dus zo'n link mag zelfs bij openen al in het document zitten. javascript: wordt bij openen geweigerd, maar de gebruiker kan hem daarna intypen en alsnog exporteren.

De HTML-export sanitizeert hrefs via DOMPurify; de PDF-tak deelt die poort niet.

Stappen

Document met [geheim](file:///etc/passwd) exporteren als PDF; de link is een URL-annotatie.

Wat het met het formaat doet

De PDF is een audience-oppervlak. Een schema dat lokaal of in de viewer code of bestanden opent, hoort er niet in.

Regressie

Alleen https:/http:/mailto: (en interne ankers) mogen een annotatie worden; file:, javascript:, data: en leeg schema → platte tekst. Test op buildDocumentExportPdf.

## Wat er misgaat In de gezette document-PDF wordt elke link `pw.AnnotationUrl(href.trim())` (`lib/services/pdf/document_pdf_widgets.dart`). Er is geen allowlist van schema's. Gevolg: `[tekst](javascript:…)` of `[tekst](file:///…)` wordt een klikbare PDF-annotatie. `file:` staat niet in `MarkdownSafetyScanner`, dus zo'n link mag zelfs **bij openen** al in het document zitten. `javascript:` wordt bij openen geweigerd, maar de gebruiker kan hem daarna intypen en alsnog exporteren. De HTML-export sanitizeert hrefs via DOMPurify; de PDF-tak deelt die poort niet. ## Stappen Document met `[geheim](file:///etc/passwd)` exporteren als PDF; de link is een URL-annotatie. ## Wat het met het formaat doet De PDF is een audience-oppervlak. Een schema dat lokaal of in de viewer code of bestanden opent, hoort er niet in. ## Regressie Alleen `https:`/`http:`/`mailto:` (en interne ankers) mogen een annotatie worden; `file:`, `javascript:`, `data:` en leeg schema → platte tekst. Test op `buildDocumentExportPdf`.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
LibreKAT/Ocideck#1642
No description provided.