Filigrana per le copie dei documenti d'identità, ispirata all'articolo Copia della carta d'identità? Anche no e a FiligraneFacile.
Tutto gira nel browser: niente server, niente upload, niente dipendenze di rete.
La CSP in index.html (connect-src 'none') impedisce alla pagina qualsiasi richiesta in uscita.
Scarica lo zip dell'ultima release, estrailo e fai doppio clic su index.html (Chrome, Edge, Firefox, Safari). Funziona anche offline.
Oppure provala online, senza scaricare nulla: francofarnedi.github.io/sigillo. Anche la versione online gira tutta nel tuo browser: nessun file viene caricato.
Utile per ospitare Sigillo su un server aziendale, su un NAS o su un PC della rete di casa, così lo usano
anche colleghi e famiglia. L'immagine è pubblicata su GitHub Container Registry:
ghcr.io/francofarnedi/sigillo,
per computer Intel/AMD e ARM (Mac Apple Silicon, Raspberry Pi). Non serve un account GitHub per scaricarla.
1. Installa Docker (una volta sola): Docker Desktop su Mac e Windows, oppure Docker Engine su Linux.
2. Scarica l'immagine di una versione precisa (consigliato) o l'ultima:
docker pull ghcr.io/francofarnedi/sigillo:0.2.03. Avvia l'app:
docker run -d --name sigillo -p 8080:8080 --read-only --tmpfs /tmp --restart unless-stopped ghcr.io/francofarnedi/sigillo:0.2.04. Aprila nel browser: http://localhost:8080 (dagli altri PC della rete: http://<indirizzo-del-server>:8080).
Comandi utili:
| Cosa | Comando |
|---|---|
| Fermarla | docker stop sigillo |
| Riavviarla | docker start sigillo |
| Vedere se è attiva | docker ps --filter name=sigillo |
| Aggiornarla a una nuova versione | docker rm -f sigillo, poi ripeti i punti 2 e 3 con il nuovo numero |
| Usare un'altra porta (es. 9000) | sostituisci -p 8080:8080 con -p 9000:8080 |
Con Docker Compose: scarica docker-compose.yml in una cartella e lancia
docker compose up -d. Per aggiornare: docker compose pull && docker compose up -d.
Tag disponibili: 0.2.0 (versione esatta), 0.2 (ultima correzione della 0.2), latest (ultimo commit su main).
Dai sorgenti: docker build -t sigillo . e poi docker run -d -p 8080:8080 sigillo.
L'immagine serve solo file statici con nginx. Gira senza root e non tiene log degli accessi, e la CSP blocca ogni richiesta in uscita. Anche qui i documenti vengono elaborati nel browser di chi usa l'app e non arrivano mai al server: il container non ha niente da conservare. Nota: se lo esponi fuori dalla tua rete, mettilo dietro HTTPS (per esempio un reverse proxy come Caddy o Traefik).
- Documento: carica JPG/PNG/WebP/HEIC (HEIC solo su Safari) o PDF, con scelta della pagina.
- Ritaglio: selezioni solo il dettaglio che serve (proporzioni libere, tessera ID-1, A4) e puoi ruotare.
- Filigrana: testo a mosaico diagonale con destinatario, finalità, data e codice unico
SG-XXXXXX, più linee di sicurezza ondulate e un sigillo rotondo con il codice. Puoi regolare colore, opacità, dimensione, densità e angolo. - Protezioni: bianco e nero; coperture a nero pieno o pixelate sui dati non richiesti; marca invisibile con il codice nascosto nei pixel.
- Esporta: PNG, JPG o PDF, sempre senza EXIF. Ogni copia entra nel registro e riceve subito un nuovo codice.
- Registro: elenco delle copie rilasciate (destinatario, finalità, data, codice, SHA-256, miniatura),
salvato in
localStorage, con esportazione e importazione in JSON. - Verifica: carichi una copia ritrovata e Sigillo ti dice a chi l'avevi data. Confronta prima l'impronta SHA-256 (file identico), poi cerca la marca invisibile; in alternativa puoi cercare il codice a mano.
- Messaggio GDPR (artt. 13, 15, 17) già compilato, da copiare nella mail.
108 bit: 16 di sincronismo e 2 copie di (30 bit di codice + CRC-16). Sono disposti in una griglia 12×9 di celle 4×4 px ripetuta su tutta l'immagine, con una variazione di luminosità di ±4. In lettura il segnale di tutte le ripetizioni si somma, quindi:
- regge a screenshot, ritagli parziali, nuovi salvataggi in PNG, JPG fino a qualità 70 circa e screenshot su schermo retina (2×);
- non regge a ridimensionamenti non interi, foto dello schermo o stampa e scansione.
Prima si confronta per correlazione con i codici del registro, che è il metodo più tollerante; poi si prova la lettura diretta con correzione dei bit più deboli.
index.html interfaccia
style.css stile (solo font di sistema, nessuna risorsa esterna)
app.js logica: caricamento, ritaglio, render, marca invisibile, registro, verifica
vendor/ pdf.js 3.11.174 (legacy) e jsPDF 2.5.2, in locale
pdf.js gira con il "fake worker" (pdf.worker.min.js caricato via <script>), così funziona anche da file://.
Segnalazioni, idee e pull request sono benvenute: leggi CONTRIBUTING.md. Per le vulnerabilità di sicurezza segui SECURITY.md. Chi partecipa rispetta il codice di condotta.
Sigillo è rilasciato con licenza MIT: puoi usarlo, modificarlo e redistribuirlo liberamente, a patto di mantenere l'avviso di copyright.
Le librerie in vendor/ restano con le loro licenze, riportate nell'intestazione di ciascun file:
pdf.js (Apache-2.0, © Mozilla Foundation) e
jsPDF (MIT, © James Hall, yWorks GmbH e contributori).