Modello di runtime e sicurezza dei plugin di Emdash CMS

Comprendi come EmDash separa l'esecuzione dei plugin fidati e sandboxati, e perché Dynamic Workers è fondamentale per i confini di sicurezza.

Perché esiste questo modello

La maggior parte degli ecosistemi di plugin per CMS fallisce sullo stesso confine: le estensioni girano con troppi privilegi.
EmDash affronta questo problema separando le modalità di esecuzione dei plugin e rendendo espliciti i confini delle capacità.

Due classi di esecuzione

Plugin fidati

  • caricati come parte del runtime dell’applicazione
  • adatti a codice che possiedi o di cui ti fidi completamente
  • operativamente semplici, ma la sicurezza dipende dalla tua disciplina di revisione

Plugin sandboxati

  • eseguiti in ambienti worker isolati
  • progettati per logiche di estensione non fidate o semi-fidate
  • limitati da capacità esplicite, limiti di runtime e regole di rete

La postura di sicurezza dipende meno dall’intento del plugin e più dalle garanzie di isolamento del runtime.

Dynamic Workers nell’architettura

Dynamic Workers è il meccanismo di isolamento usato per l’esecuzione sandbox su Cloudflare.
Senza questo, la modalità sandbox non è disponibile e dovresti operare solo con l’assunzione di plugin fidati.

In termini pratici:

  • Piano gratuito: il CMS core funziona, la modalità plugin sandboxata no
  • Piano a pagamento con Dynamic Workers: il modello sandbox diventa disponibile

Modello delle capacità: privilegio minimo per impostazione predefinita

Un plugin dovrebbe dichiarare solo ciò che gli serve:

  • leggere contenuti
  • scrivere in domini di contenuto specifici
  • chiamare endpoint di rete in uscita
  • attivare hook di workflow selezionati

Se una capacità non è concessa, l’operazione deve fallire in modo deterministico. Questo è un requisito di progettazione, non una cortesia “best effort”.

// Esempio: mantieni esplicito l'ambito delle capacità
export default definePlugin({
  id: "notify-on-publish",
  capabilities: ["read:content", "email:send"]
});

Guardrail di runtime che contano

Sicurezza e affidabilità dipendono entrambe da limiti rigidi:

  • limiti di CPU e tempo reale impediscono handler fuori controllo
  • tetti di memoria limitano abusi e perdite accidentali
  • policy di rete bloccano tentativi arbitrari di esfiltrazione

Questi controlli trasformano i guasti dei plugin in incidenti circoscritti invece che in indisponibilità della piattaforma.

Modello di minaccia in una pagina

Presupponi che qualsiasi plugin di terze parti possa contenere:

  • comportamenti malevoli
  • dipendenze obsolete
  • bug logici in condizioni di eventi non comuni

Il runtime dei plugin dovrebbe quindi garantire:

  • contenimento del raggio d’impatto
  • operazioni privilegiate negate per impostazione predefinita
  • risultati di esecuzione verificabili

La fiducia deve essere guadagnata tramite policy, non concessa con l’installazione.

Modello operativo sul piano gratuito

Se lavori senza supporto sandbox:

  • mantieni minimo il set di plugin
  • preferisci plugin first-party o revisionati internamente
  • esegui revisioni di dipendenze e permessi ai gate di rilascio
  • isola, dove possibile, le integrazioni rischiose in servizi esterni

Questo è un modello praticabile per molti team, ma richiede una disciplina di governance più rigorosa.

Criteri decisionali: quando richiedere la modalità sandbox

Considera la modalità sandbox obbligatoria quando:

  • installi su larga scala plugin di autori esterni
  • la compliance richiede evidenze di isolamento più forti
  • il rischio di business in caso di compromissione plugin è significativo

Considera la modalità sandbox opzionale quando:

  • la superficie dei plugin è ridotta e completamente auditata
  • il team controlla end-to-end la pipeline di rilascio

Checklist pratica di governance

Prima di abilitare qualsiasi plugin in produzione:

  • documenta proprietario e scopo del plugin
  • rivedi capacità richieste ed endpoint in uscita
  • definisci responsabile e procedura di rollback
  • valida il comportamento in staging con iniezione di errori

La sicurezza dei plugin non è una decisione architetturale una tantum. È un processo operativo supportato da confini di runtime.