Notes tècniques
Model de seguretat
Què protegeix reader.me i què no, i com es van prendre decisions com ara "usar AES-128 en lloc d'AES-128" o "mantenir 'unsafe-inline' al CSP". Escrit per a reviewers de seguretat i lectors escèptics — sense màrqueting.
Model d'amenaces
Sí defensem contra
- Fuita del document via upload. Tota l'arquitectura està construïda per fer estructuralment impossible pujar documents.
- Fuita via JS de tercers. El CSP restringeix
script-srca'self'+ una petita allowlist. - PDFs maliciosos contra PDF.js. Fixat a ≥4.2.67 (fix de CVE-2024-4367) amb
isEvalSupported: falseienableXfa: false. - Brute-force de contrasenya a PDF Protegir. AES-128 amb IV aleatòria — elecció conservadora enfront d'AES-128 amb debilitats conegudes (Cryptanalysis of PDF Security Handler, 2020).
- XSS via nom de fitxer. Filenames renderitzats com a text; metadata escrita com
PDFHexString.fromText. - Pressió de memòria en fitxers grans. Operacions >20 MB dispatch a Comlink Web Worker amb transferables zero-copy.
No defensem contra
- Extensions del navegador amb keylogger / screen recorder. Una extensió amb
activeTabpot llegir tot el que llegim. Fora del nostre perímetre. - Compromís a nivell OS. Si la màquina està rootejada, l'atacant ja té el fitxer.
- Operador de xarxa fent MitM amb CA col·laboradora. Un actor estat-nació pot fer coses dolentes a qualsevol HTTPS.
- Side channels de CPU. Spectre/Meltdown — confiem en mitigacions del navegador.
Content Security Policy
reader-web/public/_headers i l'aplica Cloudflare Pages a cada resposta. Highlights:default-src 'self'— tot fetch va per defecte al first-party.script-src 'self' 'wasm-unsafe-eval' 'unsafe-inline'+ orígens d'analytics. La relaxació'unsafe-inline'és requerida per la hidratació d'Astro; triada a la Fase 1 perquè fer el hash dels inlines costava ~600 ms de LCP al mòbil.connect-srcrestringit a'self'+ analytics + CDN de Tesseract. Cap endpoint accepta dades de documents.frame-ancestors 'none'— clickjacking impossible.upgrade-insecure-requests— tot HTTP forçat a HTTPS.
Política de dependències i resposta a CVE
- Rangs fixats a
package.jsonamb titlla, patch releases via Dependabot. - SLA de pegat per a CVE crítica: 72 h des de la divulgació pública quan la CVE afecta camins de codi que exercitem.
- Tesseract WASM i worker self-hosted a
/tesseract/per evitar dependència de CDN extern en bytes crítics. Les trained data d'OCR per idioma es descarreguen de l'host fixattessdata.projectnaptha.comen el primer ús i queden a la cau per a ús offline — el teu document mai no toca la xarxa en cap cas. - Verifica la promesa de privacitat al teu navegador — DevTools → Network mentre s'executa qualsevol tool. Zero peticions de document. Vegeu la recepta de 30 segons.
Quality gates a CI
- Engine purity check — força que
pdf-engine/core/**mai no toqui DOM, fetch, window, navigator. - Tests unitaris — Vitest cobreix cada funció pura al 97% línies / 100% funcions.
- Tests end-to-end — Playwright en flows reals de browser per cada PR.
- Accessibilitat — axe-core asserta zero violacions WCAG 2.1 / 2.2 AA en 8 rutes (incl. RTL).
- Lighthouse CI — perf ≥95, a11y =100, SEO =100 a cada push a main.
Reportar una vulnerabilitat
Si trobes un issue de seguretat, divulga'l responsablement via email per no posar en risc els usuaris amb un report públic:
[email protected] — inclou descripció i passos mínims de reproducció.
Apuntem a confirmar en 48 h i pegar les crítiques en 72 h. Es dóna crèdit al changelog tret que prefereixis anonimat.
Relacionat
- Com funciona → — recorregut arquitectònic.
- Privacitat → — la promesa de privacitat en llenguatge clar.
- vs iLovePDF / Smallpdf → — comparació arquitectònica side-by-side.
reader.me és una idea de David Carrero, construït a Color Vivo Internet S.L.