Skip to main content
Per contrastare i rischi di attacchi o manomissioni alle action di GitHub, il progetto ufficiale Laravel adotta il pinning delle GitHub Actions. Questa pagina illustra in modo pratico le contromisure di sicurezza che dovresti implementare come sviluppatore di pacchetti.
Questa pagina è la sorella di Sviluppo di pacchetti Laravel. Si presume una conoscenza di base di GitHub Actions.

Rischi di sicurezza delle GitHub Actions

La pericolosità dei riferimenti basati su tag

Normalmente le GitHub Actions si referenziano tramite tag:
Problemi di questo approccio:
  • I tag sono mobili — un tag può essere cancellato e ricreato mantenendo lo stesso nome
  • Rischio di manomissione — se l’account del proprietario del repository viene compromesso, si può iniettare codice malevolo
  • Attacco supply chain — un attacco a un’action da cui dipendi compromette il tuo workflow

Come lo affrontano i progetti ufficiali Laravel

In laravel/laravel e laravel/framework tutte le action sono pinnate a un commit hash (SHA).

Strategia di implementazione del pinning

Passo 1: creare il file di configurazione Dependabot

Nel repository del pacchetto crea .github/dependabot.yml. Puoi copiare quello di Laravel così com’è.
Il file svolge questi ruoli:
  • Scansione automatica — cerca nuove versioni delle GitHub Actions
  • Creazione automatica di PR — apre PR di aggiornamento quando c’è una novità
  • Controllo del metodo di aggiornamento — aggiorna per versione le action non pinnate, per SHA quelle pinnate

Passo 2: pinnare le action esistenti a SHA

Cambia tutti i riferimenti delle action nei workflow esistenti in hash SHA. Puoi automatizzarlo con strumenti come pinact.

Automazione con pinact

Modifiche manuali

Se non puoi usare pinact, consulta la pagina Lookup latest version di GitHub per trovare gli SHA di ogni action e sostituiscili a mano.

Passo 3: abilitare la configurazione Dependabot

Committa e pusha .github/dependabot.yml: Dependabot avvierà la scansione automaticamente.

Meccanismo di aggiornamento automatico via Dependabot

Dependabot applica strategie diverse in base alle impostazioni di dependabot.yml.

Action non pinnata

Aggiornamento Dependabot: aggiorna il range di versione a quello nuovo
Comoda ma con rischi di sicurezza residui: risponde al movimento del tag ma non protegge dalla manomissione.

Action pinnata

Aggiornamento Dependabot: aggiorna al commit hash della nuova versione
L’approccio più sicuro. Anche con una nuova versione, il riferimento è comunque un commit hash: molto più resistente alle manomissioni.

Esempio completo di workflow

Esempio completo quando usi action in più workflow.

Gestire le PR di aggiornamento Dependabot

Le PR di aggiornamento create da Dependabot si gestiscono così.

PR di aggiornamento di una singola action

Aggiornamento semplice, procedi così:
  1. Controlla il risultato dell’esecuzione del workflow
  2. Verifica che non ci siano breaking change
  3. Merge e chiudi

PR di aggiornamento di sicurezza

Priorità massima per i fix di sicurezza: mergea per prima.

Aggiornamenti raggruppati

Se in dependabot.yml hai impostato groups, più action vengono aggiornate in un’unica PR.
Raggruppare tutti gli aggiornamenti in una sola PR riduce il numero di merge.

Vantaggi e svantaggi del pinning

Vantaggi

Svantaggi

Checklist di audit di sicurezza

Checklist per l’avvio di un nuovo progetto pacchetto.
  • Creare .github/dependabot.yml
  • Pinnare tutte le action esistenti a SHA
  • Aver completato la verifica con pinact o a mano
  • Verificare che i workflow si eseguano correttamente
  • Rivedere le PR di aggiornamento Dependabot almeno una volta a settimana
  • Merge prioritari degli aggiornamenti di sicurezza
  • Referenziare sempre a SHA le action nuove
  • Una volta al mese verificare lo stato di tutti i workflow
  • Verifica che tutti i riferimenti alle action siano su SHA
  • Verifica che Dependabot sia abilitato
  • Verifica che tutte le PR di Dependabot degli ultimi 6 mesi siano state mergeate

Pagine correlate

Nozioni di sviluppo dei pacchetti

Come sviluppare pacchetti Laravel imperniati sui service provider.

Gestire la compatibilità tra versioni dei pacchetti

Strategie di adattamento dei pacchetti agli upgrade major di Laravel.
Ultima modifica il 13 luglio 2026