<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Laravel - Matteo Cisilino</title>
	<atom:link href="https://www.cisilino.com/tag/laravel/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.cisilino.com</link>
	<description>Guide su WordPress, server e sicurezza</description>
	<lastBuildDate>Sat, 31 Oct 2026 10:02:25 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.4</generator>
	<item>
		<title>Aggiornamenti di sicurezza Laravel: come li monitoro</title>
		<link>https://www.cisilino.com/2026/11/03/aggiornamenti-sicurezza-laravel-composer-audit/</link>
					<comments>https://www.cisilino.com/2026/11/03/aggiornamenti-sicurezza-laravel-composer-audit/#respond</comments>
		
		<dc:creator><![CDATA[matteocisilino]]></dc:creator>
		<pubDate>Tue, 03 Nov 2026 08:00:00 +0000</pubDate>
				<category><![CDATA[Server e database]]></category>
		<category><![CDATA[aggiornamento]]></category>
		<category><![CDATA[Composer]]></category>
		<category><![CDATA[Laravel]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[script bash]]></category>
		<category><![CDATA[server management]]></category>
		<guid isPermaLink="false">https://www.cisilino.com/?p=1389</guid>

					<description><![CDATA[<p>Gestisco diversi server di produzione. La maggior parte del traffico che passa dai miei hosting va verso siti WordPress. Ma non tutto. Quando un cliente mi chiede un gestionale su misura, un backend per un&#8217;app, o un piccolo e-commerce con regole non standard, il CMS non basta più. Lì entrano in gioco i framework PHP. [&#8230;]</p>
<p>The post <a href="https://www.cisilino.com/2026/11/03/aggiornamenti-sicurezza-laravel-composer-audit/">Aggiornamenti di sicurezza Laravel: come li monitoro</a> first appeared on <a href="https://www.cisilino.com">Matteo Cisilino</a>.</p>]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">Gestisco diversi server di produzione. La maggior parte del traffico che passa dai miei hosting va verso siti WordPress. Ma non tutto. Quando un cliente mi chiede un gestionale su misura, un backend per un&#8217;app, o un piccolo e-commerce con regole non standard, il CMS non basta più. Lì entrano in gioco i framework PHP. Per gli <strong>aggiornamenti di sicurezza Laravel</strong> ho messo in piedi un controllo che faccio girare davvero, non solo in teoria.</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" src="https://www.cisilino.com/wp-content/uploads/2026/10/aggiornamenti-sicurezza-laravel-composer-audit.webp" alt="aggiornamenti di sicurezza Laravel: scudo e pacchetti Composer in stile line-art" width="1200" height="630"/></figure>



<h2 class="wp-block-heading">Quanti siti sono CMS e quanti sono applicazioni su misura</h2>



<p class="wp-block-paragraph">I numeri di W3Techs dicono che circa il 68% dei siti con un CMS riconosciuto usa WordPress, Shopify o una piattaforma simile. Il resto, poco più di un terzo del web pubblico monitorato, non usa nessuno dei CMS che quelle statistiche tracciano. Dentro ci sono siti statici, ma anche moltissime applicazioni custom. Non è un dato perfetto. &#8220;Nessun CMS rilevato&#8221; non equivale esattamente a &#8220;applicazione su misura&#8221;. Ma la direzione è chiara: le web app fatte a mano restano una fetta enorme di internet.</p>



<p class="wp-block-paragraph">Tra i framework PHP usati per queste applicazioni, Laravel è oggi il più diffuso. Il sondaggio State of PHP 2025 di JetBrains, su oltre 1.700 sviluppatori, riporta il 64% di utilizzo per Laravel. Symfony segue, ma più indietro. Sui miei hosting la situazione è coerente con questo trend. Le applicazioni custom che gestisco per i clienti, quando non sono WordPress, sono quasi sempre progetti Laravel. Qualche cliente arriva già con un progetto esistente da mantenere. Altri me lo chiedono da zero, sapendo che è la scelta più comune sul mercato. I conteggi assoluti di siti, da fonti come BuiltWith, vanno presi con cautela: Laravel include al suo interno diversi componenti di Symfony, e questo confonde un po&#8217; le statistiche basate solo sui pacchetti installati. Ma il quadro generale non cambia: per chi scrive applicazioni PHP su misura, oggi Laravel è il punto di partenza più comune, non l&#8217;eccezione.</p>



<h2 class="wp-block-heading">Come monitoro gli aggiornamenti di sicurezza Laravel</h2>



<p class="wp-block-paragraph">Un progetto Laravel in produzione non è mai &#8220;finito e fermo&#8221;. Il framework, i suoi componenti e le decine di pacchetti Composer che porta con sé ricevono patch quando viene trovata una falla. Se nessuno controlla, un sito può restare vulnerabile per mesi. Il cliente spesso non se ne accorge nemmeno. È lo stesso principio che ho applicato quando ho dovuto <a href="https://www.cisilino.com/2026/10/29/php2shell-cve-2026-109618-mitigazione-server/">gestire un attacco in corso su un server durante un&#8217;emergenza di sicurezza PHP</a>: meglio prevenire con un controllo regolare, che correre dietro al problema dopo che è già scoppiato.</p>



<p class="wp-block-paragraph">Per questo ho scritto uno script bash semplice. Lo faccio girare via cron su ogni progetto Laravel che gestisco. Lo integro anche nelle pipeline di deploy, quando il cliente ne ha una. Non fa magie: legge il file di lock di Composer e lo confronta con i database di vulnerabilità note. Eccolo, esattamente come lo uso io, senza modifiche.</p>



<h3 class="wp-block-heading">Lo script di audit</h3>



<pre><code>#!/usr/bin/env bash
set -euo pipefail

PROJECT_DIR="${1:-.}"
cd "$PROJECT_DIR"

echo "==> Project: $(pwd)"

if [[ ! -f composer.lock ]]; then
  echo "SKIP: composer.lock non trovato (non sembra un progetto composer installato)."
  exit 0
fi

echo ""
echo "==> Composer audit (vulnerabilità note)"
# --no-interaction utile in CI; fallisce (exit code != 0) se trova advisory
composer audit --no-interaction

echo ""
echo "==> Pacchetti outdated (info)"
composer outdated --direct || true

echo ""
echo "==> Laravel version (se presente)"
php -r '
$lock=json_decode(file_get_contents("composer.lock"), true);
$pkgs=array_merge($lock["packages"] ?? [], $lock["packages-dev"] ?? []);
$laravel=null;
foreach ($pkgs as $p) { if (($p["name"] ?? "")==="laravel/framework") { $laravel=$p["version"] ?? null; break; } }
echo $laravel ? "laravel/framework: $laravel\n" : "laravel/framework non trovato nel lock\n";
'
</code></pre>



<p class="wp-block-paragraph"><strong>Avviso</strong>: lo script è fornito così com&#8217;è, a scopo informativo. L&#8217;uso è sotto la tua esclusiva responsabilità: non mi assumo alcuna responsabilità per perdita di dati, interruzioni di servizio, o qualsiasi errore generato da un utilizzo scorretto o da un contesto diverso da quello in cui lo eseguo io stesso. Fai sempre un backup indipendente prima di eseguirlo in produzione.</p>



<p class="wp-block-paragraph"><code>composer audit</code> è un comando integrato in Composer dalla versione 2.4. Legge le versioni esatte dei pacchetti dentro <code>composer.lock</code>. Le confronta con un database di advisory di sicurezza pubblicate. Il database arriva tramite Packagist, che a sua volta si appoggia al repository FriendsOfPHP/security-advisories e al GitHub Advisory Database. Se trova una corrispondenza, elenca il pacchetto, la versione vulnerabile e l&#8217;advisory collegato. Poi termina con un codice di uscita diverso da zero. È questo il dettaglio che mi interessa di più. Un exit code non-zero è quello che permette a un cron o a una pipeline di capire da solo che qualcosa va rivisto. Non devo leggere ogni riga di log a mano.</p>



<p class="wp-block-paragraph">Sui progetti in produzione lo lancio una volta al giorno via cron, con l&#8217;output mandato per email se il comando fallisce. Su qualche cliente più strutturato l&#8217;ho integrato anche nella pipeline di deploy. Se <code>composer audit</code> trova un advisory bloccante, il deploy si ferma prima di arrivare in produzione. Meglio fermarsi lì che scoprirlo dopo, con il sito già online. Questo controllo quotidiano, ripetuto su ogni progetto, è il cuore pratico degli aggiornamenti di sicurezza Laravel che applico davvero, non solo quando mi ricordo di farlo a mano.</p>



<p class="wp-block-paragraph">La seconda riga dello script, <code>composer outdated --direct</code>, mostra solo le dipendenze dichiarate a mano nel <code>composer.json</code>. Non mostra l&#8217;intero albero delle dipendenze transitive. Un progetto Laravel medio porta con sé centinaia di pacchetti indiretti. Se li elencassi tutti, l&#8217;output sarebbe illeggibile. Finirei per ignorarlo, come capita con troppi avvisi automatici. Guardando solo le dipendenze dirette, vedo in un colpo d&#8217;occhio cosa ho scelto io. Posso decidere con calma cosa aggiornare e quando farlo.</p>



<p class="wp-block-paragraph">L&#8217;ultima parte dello script stampa la versione di <code>laravel/framework</code> presente nel lock file. Lo faccio perché il ciclo di vita delle versioni Laravel ha scadenze precise. Le voglio sapere senza aprire ogni progetto a mano, uno per uno. Secondo la tabella ufficiale di supporto pubblicata da Laravel, le patch di sicurezza per la versione 11 sono terminate il 12 marzo 2026. La versione 12 le riceve fino al 24 febbraio 2027. Dal primo trimestre 2026 la versione corrente è Laravel 13. Pianificare gli aggiornamenti di sicurezza Laravel per tempo significa anche questo: sapere su quale versione è fermo ogni progetto, prima che scada il supporto.</p>



<h2 class="wp-block-heading">I limiti onesti di questo controllo</h2>



<p class="wp-block-paragraph"><code>composer audit</code> non è un antivirus. Non legge il codice dell&#8217;applicazione. Segnala solo vulnerabilità note e già pubblicate in un advisory. Contro una falla zero-day, scoperta ma non ancora divulgata, non serve a niente. Per questo lo considero un controllo di igiene di base, non una garanzia assoluta. Gli <a href="https://getcomposer.org/doc/03-cli.md#audit" target="_blank" rel="noopener">aggiornamenti regolari dei pacchetti</a> restano la pratica più efficace, anche senza un advisory in corso. La documentazione ufficiale di Laravel consiglia di restare sulla versione corrente del framework. Consiglia anche di automatizzare i test prima di ogni aggiornamento di major. Serve a rendere l&#8217;aggiornamento un&#8217;abitudine, non un&#8217;emergenza dell&#8217;ultimo minuto.</p>



<p class="wp-block-paragraph">Resta il fatto che uno script di poche righe, lanciato ogni giorno, mi avrebbe fatto risparmiare più di un&#8217;email imbarazzante ai clienti, negli anni in cui non lo usavo ancora. Oggi fa parte della routine di manutenzione di ogni progetto Laravel che seguo. Lo affianco al monitoraggio dei log e dei tentativi di accesso sui server. Gli aggiornamenti di sicurezza Laravel non eliminano il rischio. Lo riducono parecchio. E costano pochissimo, rispetto a un sito compromesso e a un cliente che perde fiducia.</p><p>The post <a href="https://www.cisilino.com/2026/11/03/aggiornamenti-sicurezza-laravel-composer-audit/">Aggiornamenti di sicurezza Laravel: come li monitoro</a> first appeared on <a href="https://www.cisilino.com">Matteo Cisilino</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.cisilino.com/2026/11/03/aggiornamenti-sicurezza-laravel-composer-audit/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
