Sicurezza

Il nostro modello di sicurezza in una frase: non c'è nulla su un server da attaccare. Tutto ciò che segue è verificabile dai tuoi DevTools.

Architettura

Abundera QR è un'applicazione a pagina singola statica distribuita da Cloudflare Pages. Non esiste alcun server applicativo, nessun database, nessun account utente, nessuna autenticazione, nessun endpoint API e nessun percorso di codice backend che elabori dati utente. Ogni operazione di generazione, codifica, scansione e rendering QR viene eseguita interamente nel tuo browser.

Modello di minaccia

Poiché non raccogliamo, archiviamo o trasmettiamo dati utente, le minacce più comuni alle app web, furto di credenziali, violazione del database, hijacking di sessione, iniezione lato server, non si applicano. La superficie di attacco residua è il bundle di asset statici (HTML, CSS, JavaScript) distribuito dalla nostra origine. Progettiamo assumendo:

Content Security Policy, per direttiva

La policy corrente (verifica nelle intestazioni di risposta per qualsiasi richiesta):

Content-Security-Policy:
  default-src 'self';
  script-src 'self' 'wasm-unsafe-eval';
  worker-src 'self' blob:;
  style-src 'self' 'unsafe-inline';
  font-src 'self';
  img-src 'self' data: blob: https:;
  connect-src 'self' https:;
  frame-ancestors 'none';
  base-uri 'self';
  form-action 'self'

Cosa permette ogni direttiva e dove scende a compromessi:

Policy CSP diverse si applicano a /bio/* (img-src rilassato per avatar forniti dall'utente) e /embed/* (frame-ancestors rilassato per embedding intenzionale). Entrambe sono documentate in site/_headers.

Intestazioni di trasporto e framing

Service worker

Il nostro service worker (site/sw.js) memorizza nella cache solo gli asset same-origin. Il gestore fetch rifiuta esplicitamente le richieste cross-origin e i metodi non-GET, puoi leggere la logica su GitHub. Le scritture in cache sono avvolte in event.waitUntil() in modo che non possano essere interrotte a metà navigazione.

Sanificazione dell'input

Ogni percorso di rendering che accetta input utente lo tratta come testo non attendibile:

Recupero di immagini cross-origin

Quando un utente incolla un URL https: come foto vCard o logo, il browser lo recupera soggetto a CORS e alla allowlist img-src del nostro CSP. L'immagine viene renderizzata in un canvas. Non diventa mai DOM attivo, non viene mai eseguita come codice e non raggiunge mai la nostra origine, il fetch è browser → immagine remota, e il risultato viene disegnato lato client. Un attaccante che controlla un URL di immagine remota può tracciare che l'URL è stato caricato (una riga di log sul proprio server) ma non può esfiltrare nulla dalla nostra pagina.

Subresource Integrity (SRI)

Tutto il JavaScript e il CSS che distribuiamo è same-origin. Non carichiamo script o fogli di stile di terze parti, quindi gli hash SRI non sono applicabili. Se mai caricheremo un asset di terze parti, includeremo un attributo SRI integrity su di esso e documenteremo il processo di aggiornamento dell'hash in questa pagina.

Segnalare una vulnerabilità

Se scopri un problema di sicurezza che interessa Abundera QR, nel nostro codice, nel nostro deployment o in una dipendenza che distribuiamo, ti preghiamo di segnalarlo privatamente a security@abundera.ai. Puntiamo a fare triage entro 72 ore. Puoi anche contattarci tramite i dettagli di contatto nel nostro file /.well-known/security.txt.

Nessun bug bounty (ancora)

Al momento non offriamo premi in denaro, ma ogni segnalazione valida confermata riceve credito nel changelog e il nostro ringraziamento pubblico.

Verifica quanto sopra

Ogni affermazione in questa pagina è verificabile dai DevTools del tuo browser senza doversi fidare di noi:

Contatto

Segnalazioni di sicurezza: security@abundera.ai

Ultimo aggiornamento: 2026-04-19. Prossima revisione: 2026-07-19.