Vai al contenuto

Sicurezza

AppFly scrive ed esegue codice per conto tuo. Ecco esattamente cosa significa per i tuoi dati: il confine di isolamento, cosa viene cifrato, cosa non viene mai raccolto e cosa succede a tutto quando te ne vai.

Un'app non può raggiungerne un'altra

Ogni app riceve il proprio database Postgres e il proprio ruolo di accesso, creato con REVOKE CONNECT … FROM PUBLIC. L'isolamento è una proprietà del database, non del codice applicativo: una query scritta da un agente in un'app non può raggiungere i dati di un'altra, nemmeno se ci prova.

Ogni app gira inoltre nel proprio container, con il proprio spazio di lavoro su disco. Si condivide solo l'host.

I segreti sono cifrati e mai mostrati per intero

Chiavi dei provider, token e variabili d'ambiente sono cifrati a riposo con AES-256-GCM. A una pagina arriva solo un indizio mascherato — gli ultimi quattro caratteri —, così né una schermata né un log di build possono far trapelare una credenziale completa.

Le chiavi vengono scritte nel .env dell'app generata, nel suo spazio di lavoro, l'unico posto che può leggerle. Noi emettiamo una sola variabile d'ambiente: l'URL del database dell'app, perché il database lo forniamo noi.

I dati dei tuoi clienti non sono nostri

AppFly conserva account, domini dei negozi, prompt e codice generato. Non legge mai clienti, ordini o dati personali del tuo negozio, e i permessi che chiediamo a Shopify non li includono.

Shopify richiede che ogni app risponda a tre webhook di conformità, e noi rispondiamo a tutti e tre. I due relativi ai dati dei clienti vengono confermati con una riga di log che attesta che abbiamo controllato e non avevamo nulla: la risposta che un merchant potrebbe aver bisogno che abbiamo agli atti.

Eliminare è la norma, non un ticket di supporto

Eliminare un'app rimuove il container, il database, i file, il deployment, il record DNS e gli accessi. La riga nel database viene eliminata per ultima, così una cancellazione interrotta viene ripetuta invece di lasciare un orfano attivo.

Disinstallare da Shopify cancella tutto ciò che appartiene al tuo negozio entro 48 ore. Un job pianificato gira ogni cinque minuti per completare ciò che il gestore di disinstallazione non ha potuto finire, così una cancellazione interrotta non torna mai in vita come app attiva.

Uscire revoca la sessione lato server. Chiudere l'account elimina tutto ciò che prevede la Privacy Policy (in inglese).

I limiti che manteniamo

Ogni richiesta a una pagina con accesso è autenticata, e le route API rispondono a una chiamata non autenticata con un 401 leggibile invece che con una pagina di login HTML.

I webhook di fatturazione sono firmati e verificati sul corpo originale della richiesta. Un deployment senza segreto webhook configurato restituisce 404 per quell'endpoint — non firmato significa non autenticato, non aperto — e una firma errata è un 401.

La console dell'operatore è protetta da password e da un cookie firmato, e le sue operazioni privilegiate sono un elenco fisso di funzioni senza shell generica. Non è raggiungibile dal sito pubblico e robots.txt la esclude.

Segnalare una vulnerabilità

Inviala a [email protected] con dettagli sufficienti per riprodurla e un'idea dell'impatto. Ti confermeremo la ricezione e ti diremo cosa stiamo facendo. Concedici un tempo ragionevole prima di renderla pubblica e non fare test sui dati di altri clienti.

Per tutto ciò che non riguarda la sicurezza, scrivi a [email protected].