<?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>Matteo Cisilino</title>
	<atom:link href="https://www.cisilino.com/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 22:52:47 +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>Attacco brute force WordPress: come fermarlo sul login</title>
		<link>https://www.cisilino.com/2026/11/02/attacco-brute-force/</link>
					<comments>https://www.cisilino.com/2026/11/02/attacco-brute-force/#respond</comments>
		
		<dc:creator><![CDATA[matteocisilino]]></dc:creator>
		<pubDate>Mon, 02 Nov 2026 08:00:00 +0000</pubDate>
				<category><![CDATA[csdn]]></category>
		<category><![CDATA[blocco IP]]></category>
		<category><![CDATA[brute force]]></category>
		<category><![CDATA[login WordPress]]></category>
		<category><![CDATA[wp-login.php]]></category>
		<guid isPermaLink="false">https://www.cisilino.com/?p=83</guid>

					<description><![CDATA[<p>Un attacco brute force su wp-login.php può durare tutta la notte. Come il plugin blocca gli IP in .htaccess prima che WordPress si carichi.</p>
<p>The post <a href="https://www.cisilino.com/2026/11/02/attacco-brute-force/">Attacco brute force WordPress: come fermarlo sul login</a> first appeared on <a href="https://www.cisilino.com">Matteo Cisilino</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Succede così: il sito è lento di notte e nessuno capisce perché. Nei log ci sono centinaia di richieste a <code>wp-login.php</code> da pochi indirizzi, con nomi utente come <em>admin</em> o il nome del dominio. È un <strong>attacco brute force su WordPress</strong>: nessuna falla da sfruttare, solo tentativi finché una password non cede.</p>
<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" src="https://www.cisilino.com/wp-content/uploads/2026/10/attacco-brute-force-wordpress-login.webp" alt="Tante linee sottili convergono su un cerchio giallo chiuso da una sbarra: un attacco brute force" width="1200" height="630"/></figure>
<h2>Cosa fa il plugin quando parte un attacco brute force</h2>
<p>Ogni login fallito di un attacco brute force viene annotato: IP, nome utente provato, esito, orario. La password no, mai. Quando un IP supera la soglia che hai impostato, il <a href="https://www.cisilino.com/2026/10/29/cisilino-site-defense-network/">plugin Cisilino Site Defense Network</a> aggiunge una regola al <code>.htaccess</code> (compatibile con Apache 2.4 e 2.2). Da quel momento le richieste di quell&#8217;indirizzo si fermano al web server. WordPress non viene nemmeno caricato, quindi il sito torna a respirare.</p>
<p>Un dettaglio che conta: il contatore è un&#8217;operazione atomica sul database. Mandare cento tentativi insieme, nello stesso istante, non permette di scavalcare la soglia.</p>
<h2>Dove vedere cosa è successo</h2>
<p>In <em>Impostazioni › Cisilino Site Defense Network</em> trovi la scheda degli IP bloccati durante un attacco brute force, con filtro, e l&#8217;elenco delle ultime 50 rilevazioni. Se un cliente si è bloccato da solo, &#8220;Sblocca&#8221; sulla riga e finisce lì.</p>
<h2>Quando gli IP sono tanti</h2>
<p>Il blocco per IP ha un limite noto. Se un attacco brute force arriva da centinaia di indirizzi diversi, ognuno deve prima superare la soglia. Con la rete Cisilino un IP già visto fallire su un altro sito del tuo cliente viene bloccato prima ancora di arrivare. In ogni caso, usa nomi utente non ovvi e password lunghe: il plugin toglie il rumore, ma non rende forte una password debole.</p>
<p>Su un hosting nginx il plugin registra i tentativi ma non può scrivere la regola a livello server. Per capire quali altre contromisure esistono, l&#8217;OWASP ha una guida sul <a href="https://owasp.org/www-community/controls/Blocking_Brute_Force_Attacks" target="_blank" rel="noopener">blocco degli attacchi brute force</a>.</p>
<h2>Domande frequenti</h2>
<h3>Come si blocca un attacco brute force su WordPress?</h3>
<p>Contando i login falliti per IP e bloccando chi supera una soglia. Il plugin lo fa scrivendo una regola in .htaccess, così la richiesta si ferma prima di WordPress.</p>
<h3>Il plugin salva le password provate?</h3>
<p>No. Registra IP, nome utente tentato, esito e orario, mai la password.</p>
<h3>Posso sbloccare un IP bloccato per errore?</h3>
<p>Sì, dalla lista degli IP bloccati con il pulsante Sblocca su ogni riga.</p>
<h2>Leggi anche</h2>
<ul>
<li><a href="https://www.cisilino.com/2026/11/05/whitelist-ip-wordpress">Whitelist IP WordPress: sblocco e ban manuali con scadenza.</a></li>
<li><a href="https://www.cisilino.com/2026/12/10/blocco-ip-condiviso-siti-wordpress">Blocco IP condiviso tra siti WordPress con il pannello.</a></li>
<li><a href="https://www.cisilino.com/2026/10/30/cisilino-site-defense-network">Cisilino Site Defense Network: il plugin di sicurezza per WordPress.</a></li>
</ul><p>The post <a href="https://www.cisilino.com/2026/11/02/attacco-brute-force/">Attacco brute force WordPress: come fermarlo sul login</a> first appeared on <a href="https://www.cisilino.com">Matteo Cisilino</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.cisilino.com/2026/11/02/attacco-brute-force/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Ingegneria sociale: il problema tra sedia e tastiera</title>
		<link>https://www.cisilino.com/2026/10/31/ingegneria-sociale-rubrica-tra-sedia-e-tastiera/</link>
					<comments>https://www.cisilino.com/2026/10/31/ingegneria-sociale-rubrica-tra-sedia-e-tastiera/#respond</comments>
		
		<dc:creator><![CDATA[matteocisilino]]></dc:creator>
		<pubDate>Sat, 31 Oct 2026 22:52:46 +0000</pubDate>
				<category><![CDATA[Tra la sedia e la tastiera]]></category>
		<category><![CDATA[phishing]]></category>
		<category><![CDATA[psicologia della truffa]]></category>
		<category><![CDATA[social engineering]]></category>
		<guid isPermaLink="false">https://www.cisilino.com/?p=1443</guid>

					<description><![CDATA[<p>Nell&#8217;informatica esiste un acronimo poco elegante ma onestissimo: PEBKAC, &#8220;Problem Exists Between Keyboard And Chair&#8221;. Tradotto senza giri di parole: il problema è tra la sedia e la tastiera. Non è il firewall che si rompe. Non è l&#8217;antivirus che dorme. È la persona davanti allo schermo che clicca, che digita una password dove non [&#8230;]</p>
<p>The post <a href="https://www.cisilino.com/2026/10/31/ingegneria-sociale-rubrica-tra-sedia-e-tastiera/">Ingegneria sociale: il problema tra sedia e tastiera</a> first appeared on <a href="https://www.cisilino.com">Matteo Cisilino</a>.</p>]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">Nell&#8217;informatica esiste un acronimo poco elegante ma onestissimo: PEBKAC, &#8220;Problem Exists Between Keyboard And Chair&#8221;. Tradotto senza giri di parole: il problema è tra la sedia e la tastiera. Non è il firewall che si rompe. Non è l&#8217;antivirus che dorme. È la persona davanti allo schermo che clicca, che digita una password dove non deve, che si fida di un messaggio scritto bene. Di questo parla l&#8217;ingegneria sociale. E di questo parla questa rubrica, che porta lo stesso nome un po&#8217; ironico.</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.cisilino.com/wp-content/uploads/2026/10/ingegneria-sociale-sedia-tastiera.webp" alt="Sedia e tastiera stilizzate con punto interrogativo, simbolo dell'ingegneria sociale e dell'errore umano" width="1200" height="630"/></figure>



<p class="wp-block-paragraph">Chi ci casca non è stupido. Questo va detto chiaro fin dal primo articolo. L&#8217;ingegneria sociale funziona perché punta su leve umane del tutto normali. La fretta di chi ha trenta mail da smaltire. Il rispetto istintivo per un capo o per una banca. La fiducia in un fornitore che si conosce da anni. Nessuno è immune, io compreso in un giorno storto. Questa rubrica non è una lista di figuracce da sbeffeggiare. È uno spazio dove racconto casi veri. Li raccolgo via via, lavorando con i clienti. Servono per imparare a riconoscere le tecniche, prima che riconoscano noi.</p>



<h2 class="wp-block-heading">Le leve psicologiche dietro l&#8217;ingegneria sociale</h2>



<p class="wp-block-paragraph">Nella pratica l&#8217;ingegneria sociale ricicla sempre le stesse quattro leve. Le trovi descritte bene anche nella voce di <a href="https://it.wikipedia.org/wiki/Ingegneria_sociale" target="_blank" rel="noopener">Wikipedia sull&#8217;ingegneria sociale</a> applicata alla sicurezza informatica. La prima è l&#8217;urgenza artificiale: scadenze finte, &#8220;il pagamento è bloccato&#8221;, &#8220;rispondi entro un&#8217;ora&#8221;. La seconda è l&#8217;autorità finta: una mail che sembra del titolare o della banca, con firma e logo copiati bene. La terza è la familiarità: un fornitore vero, un collega vero, un numero che conosci già. La quarta è la paura di perdere qualcosa: l&#8217;accesso, la fattura, la prenotazione confermata. Riconoscere queste quattro leve è già metà del lavoro. Vale per chiunque gestisca ogni giorno una casella di posta.</p>



<p class="wp-block-paragraph">Il primo caso l&#8217;ho già raccontato per intero. È un tentativo di <a href="https://www.cisilino.com/phishing-alberghiero-email-truffa-gestore-struttura/">phishing alberghiero arrivato a un gestore di struttura ricettiva</a>, con le schermate reali della mail truffa e i dettagli che l&#8217;hanno tradita. Da lì in avanti aggiungerò i casi nuovi che vedo passare, uno per volta. Senza nomi, e senza dati che possano far riconoscere nessuno.</p>



<p class="wp-block-paragraph">L&#8217;ingegneria sociale non sparirà. Cambia solo il pretesto, non la meccanica di fondo. Per questo conviene studiarla con calma, non quando è già arrivata la mail sospetta e il cuore batte un po&#8217; più forte.</p>



<p class="wp-block-paragraph">Se nei prossimi mesi ti arriva qualcosa che ti sembra strano, scrivimi. Lo guardiamo insieme. Se è un caso istruttivo, potrebbe finire, in forma anonima, nella prossima puntata di questa rubrica.</p><p>The post <a href="https://www.cisilino.com/2026/10/31/ingegneria-sociale-rubrica-tra-sedia-e-tastiera/">Ingegneria sociale: il problema tra sedia e tastiera</a> first appeared on <a href="https://www.cisilino.com">Matteo Cisilino</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.cisilino.com/2026/10/31/ingegneria-sociale-rubrica-tra-sedia-e-tastiera/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Phishing alberghiero: l&#8217;email-truffa che ho visto arrivare a un gestore di struttura</title>
		<link>https://www.cisilino.com/2026/10/31/phishing-alberghiero-email-truffa-gestore-struttura/</link>
					<comments>https://www.cisilino.com/2026/10/31/phishing-alberghiero-email-truffa-gestore-struttura/#respond</comments>
		
		<dc:creator><![CDATA[matteocisilino]]></dc:creator>
		<pubDate>Sat, 31 Oct 2026 17:57:21 +0000</pubDate>
				<category><![CDATA[Tra la sedia e la tastiera]]></category>
		<category><![CDATA[Booking.com]]></category>
		<category><![CDATA[phishing]]></category>
		<category><![CDATA[sicurezza alberghiera]]></category>
		<category><![CDATA[social engineering]]></category>
		<category><![CDATA[truffe online]]></category>
		<guid isPermaLink="false">https://www.cisilino.com/?p=1440</guid>

					<description><![CDATA[<p>In questi giorni si parla molto di truffe legate alle prenotazioni online. La Commissione Europea ha aperto un&#8217;indagine su Booking.com. Vuole sapere se la piattaforma fa abbastanza contro annunci falsi e pubblicità poco trasparente. Vuole sapere anche se fa abbastanza contro il phishing che sfrutta i dati di chi prenota una camera. Io gestisco l&#8217;hosting [&#8230;]</p>
<p>The post <a href="https://www.cisilino.com/2026/10/31/phishing-alberghiero-email-truffa-gestore-struttura/">Phishing alberghiero: l’email-truffa che ho visto arrivare a un gestore di struttura</a> first appeared on <a href="https://www.cisilino.com">Matteo Cisilino</a>.</p>]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">In questi giorni si parla molto di truffe legate alle prenotazioni online. La Commissione Europea ha aperto un&#8217;indagine su Booking.com. Vuole sapere se la piattaforma fa abbastanza contro annunci falsi e pubblicità poco trasparente. Vuole sapere anche se fa abbastanza contro il phishing che sfrutta i dati di chi prenota una camera. Io gestisco l&#8217;hosting di diverse strutture ricettive. Un caso di phishing alberghiero l&#8217;ho visto arrivare nella casella di posta di un cliente poche settimane fa. Non è una statistica. È una mail vera, con un link vero, mandata a una persona vera.</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://www.cisilino.com/wp-content/uploads/2026/10/phishing-alberghiero-email-truffa-censurata-v2.webp" alt="Email di phishing alberghiero con link mascherato oscurato per sicurezza"/></figure>



<p class="wp-block-paragraph">Il mittente usa un nome generico. Niente di sospetto a prima vista. L&#8217;oggetto è innocuo: &#8220;Disponibilità camera dal 10 al 12 novembre&#8221;. Il testo è in italiano abbastanza naturale. Ha qualche piccola imperfezione, il tipo che un madrelingua noterebbe, ma niente che faccia scattare un allarme immediato. Chi scrive dice di voler prenotare. Chiede conferma della disponibilità. Poi aggiunge un dettaglio che sembra innocuo: dichiara di aver allegato una copia del passaporto, &#8220;per facilitare la prenotazione&#8221;. C&#8217;è anche un piccolo dettaglio temporale: sarà in viaggio dal giorno 9, quindi preferirebbe avere già tutto confermato in anticipo.</p>



<p class="wp-block-paragraph">Quella frase, &#8220;sarò in viaggio&#8221;, è una leva psicologica precisa. Non è un&#8217;urgenza aggressiva. Non chiede soldi subito. Crea solo una ragione plausibile per sbrigarsi, per rispondere prima di pensarci troppo. Ho visto lo screenshot di questa email, con il link oscurato per sicurezza. La trovo un esempio quasi da manuale di come si costruisce un tentativo di phishing alberghiero efficace: gentile, credibile, con un pizzico di urgenza calcolata.</p>



<h2 class="wp-block-heading">Come funziona il phishing alberghiero in due passaggi</h2>



<p class="wp-block-paragraph">Il meccanismo ha due fasi distinte. Vale la pena capirle entrambe, perché da fuori sembrano banali e invece funzionano. La prima fase è l&#8217;email. Contiene un link abbreviato, del tipo che passa attraverso un redirector: un servizio che nasconde la vera destinazione dietro un indirizzo corto. Cliccandolo, non si vede subito dove si sta andando a finire. Questo è già il primo inganno, piccolo ma efficace.</p>



<p class="wp-block-paragraph">La seconda fase è la pagina di destinazione. È una schermata che si finge una procedura di conferma o di pagamento. Graficamente ricorda quella di una piattaforma vera, a volte abbastanza bene da ingannare anche chi lavora nel settore da anni. È lì che succede il danno vero. Il gestore della struttura, convinto di dover verificare la disponibilità o confermare la prenotazione, inserisce le proprie credenziali. Può trattarsi di quelle dell&#8217;extranet di Booking o Airbnb. Oppure di quelle della propria casella email, o del pannello di gestione del sito. Da quel momento, le credenziali sono già in mano a chi ha mandato l&#8217;email. Il resto, agli occhi di chi è stato truffato, succede dopo, quando è troppo tardi per tornare indietro.</p>



<h2 class="wp-block-heading">Perché chi gestisce una struttura è un obiettivo comodo</h2>



<p class="wp-block-paragraph">Chi lavora in una struttura ricettiva riceve decine di richieste simili ogni settimana. Email di ospiti, domande sulla disponibilità, richieste di conferma last minute. È un flusso costante, spesso gestito di fretta, tra un check-in e l&#8217;altro. Un messaggio in più, educato e plausibile, si mimetizza bene in quel flusso. Non spicca. Il punto debole non è la tecnologia del gestore. È il suo tempo limitato, e l&#8217;abitudine a rispondere in fretta a chi sembra un cliente vero. Per questo il phishing alberghiero funziona così bene: non punta a un sistema informatico, punta a una persona impegnata.</p>



<h2 class="wp-block-heading">Le red flag da riconoscere</h2>



<p class="wp-block-paragraph">Ci sono segnali concreti. Nessuno da solo basta a dimostrare una truffa, ma insieme raccontano una storia chiara. Il contatto arriva per email diretta, non dal canale ufficiale della piattaforma: Booking e Airbnb hanno sistemi di messaggistica interna, e un ospite reale li usa quasi sempre. Il link è abbreviato o mascherato, quindi non si capisce dove porta leggendo solo l&#8217;indirizzo. Il messaggio chiede di &#8220;verificare la disponibilità&#8221; cliccando un link, invece di lasciare che il gestore controlli dal proprio pannello, digitando l&#8217;indirizzo a mano come farebbe sempre. Il tono è gentile, quasi premuroso. L&#8217;urgenza è misurata: non spaventa, ma spinge comunque ad agire in fretta, prima di pensarci su.</p>



<h2 class="wp-block-heading">Perché l&#8217;ho messa sotto &#8220;Tra la sedia e la tastiera&#8221;</h2>



<p class="wp-block-paragraph">Ho aperto questa categoria sul sito apposta per i casi come questo. &#8220;Tra la sedia e la tastiera&#8221; è una battuta che chi lavora in sicurezza informatica conosce bene. Indica il punto esatto in cui succede quasi sempre il danno: la persona davanti allo schermo, non il software. La piattaforma di prenotazione non ha colpe in questo episodio specifico. Il problema non è un bug di Booking o di Airbnb. È il momento in cui un umano, magari di fretta, clicca un link che non doveva cliccare. Capirlo aiuta a difendersi meglio. Non basta un antivirus. Serve l&#8217;abitudine di fermarsi un secondo prima di cliccare, ogni volta.</p>



<p class="wp-block-paragraph">Se le credenziali finiscono comunque nelle mani sbagliate, va valutato se cambiarle subito, ovunque siano usate. Ne ho parlato quando ho raccontato la <a href="https://www.cisilino.com/2026/10/31/rotazione-credenziali-database-violazione-ispconfig/">rotazione delle credenziali del database dopo una violazione</a>. Il contesto tecnico è diverso, ma il principio resta lo stesso.</p>



<h2 class="wp-block-heading">Cosa fare per proteggere la propria struttura</h2>



<p class="wp-block-paragraph">La prima regola è semplice, ma va ripetuta spesso: mai inserire credenziali cliccando un link arrivato per email, nemmeno se sembra urgente. Se qualcuno scrive dicendo di voler prenotare, si verifica dal proprio pannello. Si digita l&#8217;indirizzo a mano, non si segue un link mandato da uno sconosciuto. La seconda regola riguarda l&#8217;autenticazione a due fattori. Va attivata su ogni account che conta: extranet della piattaforma, casella email, pannello del sito. Anche se le credenziali vengono rubate, un secondo fattore blocca comunque l&#8217;accesso, nella maggior parte dei casi. La terza regola è la segnalazione. Ogni messaggio sospetto va segnalato alla piattaforma, che usa questi dati per bloccare altri tentativi simili. Non è un caso che la gestione di questi episodi sia uno dei motivi dell&#8217;indagine europea. Il problema del phishing alberghiero riguarda anche le piattaforme, non solo i singoli gestori.</p>



<p class="wp-block-paragraph">Chi vuole seguire gli sviluppi può leggere <a href="https://www.agi.it/estero/news/2026-10-21/booking-indagine-ue-truffe-phishing-39642272/" target="_blank" rel="noopener">la ricostruzione dell&#8217;agenzia AGI sull&#8217;inchiesta della Commissione contro Booking.com</a>. Riassume bene cosa sta succedendo. E perché riguarda anche chi gestisce una struttura piccola, non solo le grandi catene.</p>



<h2 class="wp-block-heading">Se hai già cliccato o inserito dei dati</h2>



<p class="wp-block-paragraph">Se è già successo, conviene muoversi in fretta. Cambia subito la password dell&#8217;account coinvolto. Cambiala anche ovunque la stessa password sia stata riusata: è un errore comune, e chi ruba credenziali lo sa bene. Attiva la verifica in due passaggi, se non l&#8217;avevi già fatto. Controlla la cronologia degli accessi dell&#8217;account. Cerca sessioni o dispositivi che non riconosci. Avvisa la piattaforma, che ha procedure dedicate per gli account compromessi. Se nella mail avevi allegato documenti veri, tienili d&#8217;occhio: un documento d&#8217;identità rubato può essere riusato altrove, non solo per altre truffe legate al settore alberghiero.</p>



<p class="wp-block-paragraph">Il caso che ho visto non ha fatto danni. Chi l&#8217;ha ricevuto si è fermato un attimo prima di cliccare, e me l&#8217;ha segnalato. È bastato quello. La tecnologia aiuta, i filtri antispam aiutano, ma alla fine la differenza la fa sempre la persona che decide se cliccare o no. Il problema del phishing alberghiero, quasi sempre, resta tra la sedia e la tastiera.</p><p>The post <a href="https://www.cisilino.com/2026/10/31/phishing-alberghiero-email-truffa-gestore-struttura/">Phishing alberghiero: l’email-truffa che ho visto arrivare a un gestore di struttura</a> first appeared on <a href="https://www.cisilino.com">Matteo Cisilino</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.cisilino.com/2026/10/31/phishing-alberghiero-email-truffa-gestore-struttura/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Permessi file WordPress rotti? Lo script che li ripristina</title>
		<link>https://www.cisilino.com/2026/10/31/permessi-file-wordpress-script-ripristino/</link>
					<comments>https://www.cisilino.com/2026/10/31/permessi-file-wordpress-script-ripristino/#respond</comments>
		
		<dc:creator><![CDATA[matteocisilino]]></dc:creator>
		<pubDate>Sat, 31 Oct 2026 17:47:35 +0000</pubDate>
				<category><![CDATA[Server e database]]></category>
		<category><![CDATA[bash script]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[permessi file]]></category>
		<category><![CDATA[server management]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://www.cisilino.com/?p=1448</guid>

					<description><![CDATA[<p>I permessi file WordPress sono una di quelle cose a cui penso solo quando qualcosa smette di funzionare. Un plugin non riesce più a scrivere la sua cache. Un tema non carica un&#8217;immagine. O peggio: dopo un ripristino da backup il sito risponde con errori 500 a raffica. Nove volte su dieci il problema sono [&#8230;]</p>
<p>The post <a href="https://www.cisilino.com/2026/10/31/permessi-file-wordpress-script-ripristino/">Permessi file WordPress rotti? Lo script che li ripristina</a> first appeared on <a href="https://www.cisilino.com">Matteo Cisilino</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>I permessi file WordPress sono una di quelle cose a cui penso solo quando qualcosa smette di funzionare. Un plugin non riesce più a scrivere la sua cache. Un tema non carica un&#8217;immagine. O peggio: dopo un ripristino da backup il sito risponde con errori 500 a raffica. Nove volte su dieci il problema sono i permessi sballati su cartelle e file. Per questo tengo pronto uno script che li rimette a posto in un comando. Qui spiego cosa fa e perché.</p>
<figure class="wp-block-image size-large"><img decoding="async" src="https://www.cisilino.com/wp-content/uploads/2026/10/permessi-file-wordpress.webp" alt="Script bash che corregge i permessi file WordPress tra cartelle e file protetti da lucchetto" width="1200" height="630"/></figure>
<h2>Perché i permessi file WordPress si rompono così spesso</h2>
<p>Gestisco server in produzione da anni. I motivi sono sempre gli stessi. Una migrazione tra hosting diversi, con un client FTP configurato male, lascia cartelle a 777 e file eseguibili da chiunque. Un ripristino da backup che non preserva i permessi originali è un altro classico. L&#8217;archivio si scompatta con i permessi di default dell&#8217;utente che lo estrae, non con quelli che il sito aveva prima. Capita anche con un intervento manuale frettoloso via SFTP: si cambia un file di notte e si dimentica di rimettere i permessi giusti.</p>
<p>C&#8217;è poi un caso che mi sta particolarmente a cuore: la bonifica dopo un incidente di sicurezza. Quando ho scritto di come <a href="https://www.cisilino.com/2026/10/29/php2shell-cve-2026-109618-mitigazione-server/">ho protetto i server durante l&#8217;emergenza PHP2Shell</a>, uno dei passaggi era verificare i permessi file WordPress rimasti dopo la pulizia. Nessun file doveva restare scrivibile oltre il necessario. Lo stesso vale quando faccio la <a href="https://www.cisilino.com/2026/10/31/rotazione-credenziali-database-violazione-ispconfig/">rotazione delle credenziali dopo una violazione ISPConfig</a>. Ripristinare permessi corretti è uno dei controlli che faccio sempre, non un&#8217;opzione.</p>
<h2>Cosa fa davvero lo script</h2>
<p>Lo script è volutamente piccolo. Imposta le cartelle a 755, i file a 644, e protegge <code>wp-config.php</code> a 600 se lo trova. Vediamo perché proprio questi numeri.</p>
<pre><code>#!/bin/bash

echo "Ripristino permessi nella cartella attuale..."

# Imposta tutte le cartelle a 755
find . -type d -exec chmod 755 {} +

# Imposta tutti i file a 644
find . -type f -exec chmod 644 {} +

# Proteggi wp-config.php se presente
if [ -f "wp-config.php" ]; then
  chmod 600 wp-config.php
  echo "=> wp-config.php protetto con permessi 600"
fi

echo "Fatto! Permessi aggiornati."</code></pre>
<p><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.</strong></p>
<p>Le cartelle vanno a 755, cioè <code>rwxr-xr-x</code>. Il proprietario può leggere, scrivere ed entrare nella cartella. Il gruppo e tutti gli altri possono solo leggerla ed entrarci. Quell&#8217;ultima &#8220;x&#8221;, sulle cartelle, non significa &#8220;eseguire&#8221; come per un programma. Su una directory vuol dire poter attraversarla. Il server web deve poter attraversare ogni cartella per arrivare al file richiesto. Ma non deve poterci scrivere dentro, se non ne è il proprietario.</p>
<p>I file invece vanno a 644, cioè <code>rw-r--r--</code>. Lettura per tutti, scrittura solo per il proprietario, nessun bit di esecuzione per nessuno. Un file <code>.php</code> non deve mai essere eseguibile come un binario. Viene interpretato da PHP-FPM o dal modulo del server, non lanciato direttamente dalla shell. Un file eseguibile a livello di filesystem è un segnale che qualcosa non va, non un vantaggio. Sono questi due numeri, 755 e 644, il cuore di come imposto i permessi file WordPress su ogni server che gestisco.</p>
<p>Il caso speciale è <code>wp-config.php</code>, protetto a 600, cioè <code>rw-------</code>. Solo il proprietario può leggerlo e scriverlo, nemmeno il gruppo. Quel file contiene le credenziali del database in chiaro, oltre alle chiavi di sicurezza di WordPress. Non c&#8217;è motivo che altri utenti del sistema, inclusi altri siti sullo stesso server condiviso, possano anche solo leggerlo.</p>
<h2>Il dettaglio tecnico di find con il +</h2>
<p>Chi guarda da vicino il comando <code>find . -type d -exec chmod 755 {} +</code> noterà quel <code>+</code> finale al posto del più comune <code>\;</code>. Non è un dettaglio stilistico. Con <code>\;</code>, <code>find</code> lancia un processo <code>chmod</code> separato per ogni file o cartella trovata. Su un sito con poche decine di file va bene. Ma su un hosting con centinaia di migliaia di file, tra core, plugin, temi e uploads, è diverso. Significa avviare centinaia di migliaia di processi uno dopo l&#8217;altro. Con <code>+</code>, invece, <code>find</code> raggruppa quanti più argomenti possibile. Li passa a poche chiamate di <code>chmod</code>, esattamente come farebbe <code>xargs</code>. La differenza di velocità, su un sito grande, si misura in minuti e non in secondi. Chi vuole la descrizione ufficiale può leggere la <a href="https://man7.org/linux/man-pages/man1/find.1.html" target="_blank" rel="noopener">pagina man di find su man7.org</a>, alla voce <code>-exec command {} +</code>.</p>
<h2>Come lo lancio, anche da remoto</h2>
<p>La versione che preferisco è scaricare lo script, dargli un&#8217;occhiata, e solo dopo eseguirlo. La consiglio anche a chi legge:</p>
<pre><code>cd /percorso/del/sito
curl -sO https://cisilino.com/mscripts/fix_permessi.sh
cat fix_permessi.sh   # guardo cosa contiene prima di lanciarlo
chmod +x fix_permessi.sh
./fix_permessi.sh</code></pre>
<p>Quando sono in fretta, su un server che conosco, uso la versione compatta. Scarico ed eseguo in sequenza, senza passaggi intermedi:</p>
<pre><code>cd /percorso/del/sito && curl -sO https://cisilino.com/mscripts/fix_permessi.sh && chmod +x fix_permessi.sh && ./fix_permessi.sh</code></pre>
<p>Ecco l&#8217;equivalente con <code>wget</code>. Utile sui server dove curl non è installato di default:</p>
<pre><code>cd /percorso/del/sito && wget -q https://cisilino.com/mscripts/fix_permessi.sh && chmod +x fix_permessi.sh && ./fix_permessi.sh</code></pre>
<p>Quello che non faccio mai, nemmeno di fretta, è la pipe diretta tipo <code>curl https://... | bash</code>. Tecnicamente funziona. Per questo script specifico il rischio è basso, perché lo conosco e lo controllo io stesso. Ma è un&#8217;abitudine che vale la pena non prendere. Eseguire alla cieca un codice scaricato al volo, senza un attimo per leggerlo, prima o poi si paga. Magari non con questo script, ma con un altro trovato in giro e meno affidabile. Un <code>cat</code> prima del <code>chmod +x</code> costa due secondi.</p>
<h2>Dove lo script si ferma</h2>
<p>Lo script opera su &#8220;.&#8221; in modo ricorsivo. Va lanciato dalla root del sito, non da una cartella superiore o da una sottocartella qualsiasi. Se lo lancio dalla cartella sbagliata, sistema i permessi solo di quella, oppure tocca file che non c&#8217;entrano nulla.</p>
<p>Non gestisce i casi particolari in cui alcune cartelle devono restare scrivibili dal gruppo del server web. Capita con <code>wp-content/uploads</code> su certe configurazioni, o con la cache di alcuni plugin che scrivono file a runtime. In quei casi, dopo lo script, va rimesso a mano il permesso specifico che serve. Altrimenti il plugin smette di funzionare.</p>
<p>Non c&#8217;è nessuna modalità dry-run, né un backup integrato dei permessi precedenti. A differenza di script più strutturati, come quello per la <a href="https://www.cisilino.com/2026/10/31/rotazione-credenziali-database-violazione-ispconfig/">rotazione delle password del database</a>, qui non c&#8217;è rete di sicurezza. Va eseguito sapendo già cosa ci si aspetta di ottenere. E va lanciato con l&#8217;utente giusto: quello proprietario dei file, non root. Altrimenti i file finiscono di proprietà di root. A seconda di come è configurato PHP-FPM, il server web potrebbe non riuscire più a leggerli.</p>
<p>Con questi limiti chiari in testa, è uno script che tengo a portata di mano su ogni server. Quando i permessi file WordPress vanno in confusione, in un comando torno a una base pulita. Poi sistemo a mano le eccezioni che servono davvero.</p><p>The post <a href="https://www.cisilino.com/2026/10/31/permessi-file-wordpress-script-ripristino/">Permessi file WordPress rotti? Lo script che li ripristina</a> first appeared on <a href="https://www.cisilino.com">Matteo Cisilino</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.cisilino.com/2026/10/31/permessi-file-wordpress-script-ripristino/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Rotazione delle credenziali database dopo una violazione ISPConfig</title>
		<link>https://www.cisilino.com/2026/10/31/rotazione-credenziali-database-violazione-ispconfig/</link>
					<comments>https://www.cisilino.com/2026/10/31/rotazione-credenziali-database-violazione-ispconfig/#respond</comments>
		
		<dc:creator><![CDATA[matteocisilino]]></dc:creator>
		<pubDate>Sat, 31 Oct 2026 10:03:56 +0000</pubDate>
				<category><![CDATA[Server e database]]></category>
		<category><![CDATA[ISPConfig]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[risposta agli incidenti]]></category>
		<category><![CDATA[rotazione credenziali]]></category>
		<category><![CDATA[script bash]]></category>
		<category><![CDATA[server management]]></category>
		<guid isPermaLink="false">https://www.cisilino.com/?p=1414</guid>

					<description><![CDATA[<p>Perché la rotazione delle credenziali database diventa urgente dopo una violazione ISPConfig sospetta, e come lo script a tre fasi la gestisce con backup integrati.</p>
<p>The post <a href="https://www.cisilino.com/2026/10/31/rotazione-credenziali-database-violazione-ispconfig/">Rotazione delle credenziali database dopo una violazione ISPConfig</a> first appeared on <a href="https://www.cisilino.com">Matteo Cisilino</a>.</p>]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">Ruoto le credenziali nel momento in cui sospetto una violazione. Non dopo averla confermata. La rotazione delle credenziali database su un server ISPConfig suona come manutenzione di routine. Smette di essere routine il giorno in cui trovi una web shell su un sito ospitato. O un file di configurazione che non sai spiegare, finito in un backup pubblico. A quel punto, ogni password legata a quello stack di database deve essere nuova. Verificata. Documentata. Non semplicemente presunta a posto.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" src="https://www.cisilino.com/wp-content/uploads/2026/10/database-credential-rotation-ispconfig.webp" alt="rotazione delle credenziali database: lucchetto e chiave sopra un database ISPConfig" width="1200" height="630"/></figure>



<h2 class="wp-block-heading">Quando la rotazione non è più facoltativa?</h2>



<p class="wp-block-paragraph">Ci sono alcuni scenari che tornano a sufficienza da farmi tenere pronto un piano di rotazione. Preferisco non improvvisarne uno sotto pressione.</p>



<p class="wp-block-paragraph">Un plugin o un CMS su un sito ospitato viene compromesso. Ho raccontato un caso reale su questo tipo di server in <a href="https://www.cisilino.com/2026/10/29/php2shell-cve-2026-109618-mitigazione-server/">PHP2Shell: come ho protetto i server in attesa della patch</a>, una vulnerabilità PHP che permetteva a un attaccante di piazzare una web shell prima che esistesse una patch. Una volta che una web shell viene eseguita sotto un utente di hosting, spesso può leggere il config.inc.php di quel sito. Su un box ISPConfig condiviso, quel file sta proprio accanto alle credenziali del database del pannello di controllo stesso. Non solo la credenziale che l&#8217;attaccante stava effettivamente cercando.</p>



<p class="wp-block-paragraph">Un file di configurazione finisce dove non dovrebbe. Un archivio di backup lasciato in una cartella pubblica. Un repository pubblicato con un file fuori posto. Un log più leggibile di quanto chiunque intendesse. config.inc.php e mysql_clientdb.conf non hanno motivo di stare in nessuno di questi posti. Gli errori succedono comunque, compresi i miei.</p>



<p class="wp-block-paragraph">Un amministratore di sistema lascia il team. Per quanto amichevole sia l&#8217;addio, le credenziali database condivise che deteneva sono credenziali di cui non mi fido più del tutto. La fiducia non si trasferisce automaticamente quando qualcuno esce dalla porta.</p>



<p class="wp-block-paragraph">Un&#8217;intrusione sospetta, anche non confermata. Questo è il caso più difficile da spiegare a chi non ha mai gestito un server sotto sospetto di attacco. Non si aspetta la prova prima di agire. Si presume la compromissione e si ruota. Una rotazione non necessaria costa un pomeriggio. Una saltata, dopo una violazione reale, può costare ogni sito ospitato dal server.</p>



<h2 class="wp-block-heading">Perché la rotazione delle credenziali database manuale è così incline all&#8217;errore</h2>



<p class="wp-block-paragraph">La prima volta che ho ruotato a mano le credenziali database di ISPConfig, ho sottovalutato quanti file fossero coinvolti. Devono tutti cambiare insieme, altrimenti qualcosa si rompe silenziosamente poche ore dopo.</p>



<p class="wp-block-paragraph">C&#8217;è config.inc.php sul lato server, e una seconda copia sul lato interfaccia. Entrambe devono avere gli stessi nuovi valori. C&#8217;è mysql_clientdb.conf, che ISPConfig legge per gestire il database di ogni sito ospitato, non solo la propria manutenzione interna. Dovecot, Pure-FTPd e Postfix mantengono ciascuno una propria copia di alcune delle stesse credenziali. Mail e FTP possono smettere di autenticarsi silenziosamente se aggiorni l&#8217;utente del database e ne dimentichi anche solo uno dei tre.</p>



<p class="wp-block-paragraph">Poi c&#8217;è la topologia Master/Slave che alcune delle mie installazioni usano. Un nodo Slave si autentica al database del suo Master sulla rete, con una password separata. Quella password va ruotata sul Master stesso, non solo in locale. Sbaglia la sequenza, e uno Slave può chiudersi fuori dallo stesso Master da cui dovrebbe replicare.</p>



<p class="wp-block-paragraph">Niente di tutto questo è concettualmente difficile. Sono tanti file. Diversi servizi da riavviare, in un ordine sensato. Quasi nessuna tolleranza per un errore di digitazione, specialmente mentre lo fai sotto pressione, appena dopo aver trovato qualcosa che non volevi trovare. Questa combinazione è esattamente il motivo per cui la rotazione delle credenziali database continuava a sembrarmi più rischiosa a mano di quanto il compito stesso dovrebbe essere. È per questo che ho scritto reset_DB_password.sh, dopo aver vissuto il problema io stesso più di una volta.</p>



<h2 class="wp-block-heading">Cosa fa davvero reset_DB_password.sh</h2>



<p class="wp-block-paragraph">reset_DB_password.sh rileva se il nodo è Standalone, Master o Slave. Poi esegue solo le fasi che quel ruolo richiede.</p>



<p class="wp-block-paragraph">La Fase A ruota la password root locale di MySQL. È la password che ISPConfig stesso usa per gestire il database di ogni sito ospitato. Lo script aggiorna mysql_clientdb.conf per farlo corrispondere al nuovo valore.</p>



<p class="wp-block-paragraph">La Fase B ruota la password dell&#8217;utente di controllo ispconfig. Aggiorna config.inc.php sia sul lato server che sul lato interfaccia. Poi aggiorna le credenziali corrispondenti dentro Dovecot, Pure-FTPd e Postfix, così mail e FTP continuano ad autenticarsi senza un passaggio manuale separato su altri tre file di configurazione.</p>



<p class="wp-block-paragraph">La Fase C viene eseguita solo su uno Slave. Si connette da remoto al database del Master. Ruota lì la password dell&#8217;utente Slave, poi aggiorna dbmaster_password in locale, così la replica continua ad autenticarsi correttamente con il nuovo valore.</p>



<p class="wp-block-paragraph">Dopo la Fase B, lo script offre di riavviare Dovecot, Pure-FTPd e Postfix per te. Dico quasi sempre di sì. Una rotazione delle credenziali che lascia un servizio di posta in esecuzione con la vecchia password non è finita, è solo silenziosamente rotta. Riavviare nella stessa sessione, subito dopo il cambio dei file di configurazione, mantiene tutto dentro una sola breve finestra di manutenzione invece di tre scoperte separatamente più avanti.</p>



<h2 class="wp-block-heading">Backup prima che qualcosa cambi</h2>



<p class="wp-block-paragraph">Prima di toccare un solo file, lo script esegue una copia rsync completa di /usr/local/ispconfig/ in una cartella con timestamp. Tenta anche un mysqldump non bloccante dei database mysql e dbispconfig. Non bloccante di proposito: preferisco finire una rotazione delle credenziali database piuttosto che restare in attesa di un dump bloccato per qualche motivo non collegato. Ogni file di configurazione che modifica riceve prima una propria copia .bak, prima che qualsiasi stringa al suo interno venga sostituita.</p>



<p class="wp-block-paragraph">Niente di tutto questo sostituisce una strategia di backup indipendente. Continuo a fare uno snapshot separato, o un backup completo, prima di eseguire questo script su qualsiasi server che conta davvero. Il disclaimer dello script stesso dice la stessa cosa, in modo più diretto di quanto abbia appena fatto io.</p>



<h2 class="wp-block-heading">Dry run prima, sempre</h2>



<p class="wp-block-paragraph">Ogni fase chiede conferma prima di cambiare qualcosa. &#8211;dry-run simula un&#8217;intera esecuzione senza toccare un solo file. Uso il dry-run prima su ogni server, ogni volta. Anche su quelli su cui ho già ruotato le credenziali, e penso di conoscere bene. &#8211;skip-local-root salta la Fase A, per quando serve ruotare solo la password dell&#8217;utente di controllo. &#8211;role=master o &#8211;role=slave forzano il rilevamento automatico, per il raro caso in cui non legga correttamente da solo la topologia di un server.</p>



<p class="wp-block-paragraph">Le password che genera sono di 32 caratteri, solo lettere e cifre. Lunghe abbastanza da resistere a un tentativo di indovinare. Semplici abbastanza che i parser di MySQL e PHP non si inceppino mai su un simbolo fuori posto in una stringa di connessione. Ho testato lo script su ISPConfig 3.3.1p1. Non l&#8217;ho eseguito contro rami più vecchi o più nuovi. Non darei per scontato un comportamento identico lì, senza prima verificarlo io stesso.</p>



<p class="wp-block-paragraph">Il ruolo di un nodo non è sempre ovvio a colpo d&#8217;occhio, specialmente su un server che hai ereditato invece di costruire tu stesso. È per questo che esiste &#8211;role, e perché l&#8217;output del dry-run merita di essere letto riga per riga la prima volta, non scorso velocemente. Preferirei passare due minuti a confermare che uno Slave è davvero uno Slave, piuttosto che scoprirlo nel modo peggiore a metà rotazione.</p>



<h2 class="wp-block-heading">Cosa ti direi prima che tu lo esegua</h2>



<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 o uno snapshot VM prima di eseguirlo in produzione, indipendentemente da ciò che il passaggio di backup dello script già catturi per te.</p>



<p class="wp-block-paragraph">È software libero. Puoi ridistribuirlo e modificarlo, con attribuzione a me come autore originale. Il codice sorgente di reset_DB_password.sh, e il resto della collezione ispconfig-fast-tools, è su GitHub su <a href="https://github.com/matteocisilino/ispconfig-fast-tools" target="_blank" rel="noopener">github.com/matteocisilino/ispconfig-fast-tools</a>.</p>



<h2 class="wp-block-heading">La rotazione delle credenziali database è un&#8217;abitudine, non un lavoro di pulizia</h2>



<p class="wp-block-paragraph">La rotazione delle credenziali database dopo una violazione confermata è semplicemente una risposta agli incidenti competente. La maggior parte degli amministratori lo farebbe senza bisogno di sentirlo due volte. L&#8217;abitudine più difficile è farlo dopo una violazione solo sospettata, prima che ci sia una prova. È l&#8217;unica versione del piano che limita davvero il danno, mentre è ancora limitabile. Uno script che esegue le fasi giuste per il ruolo di un server, fa prima i propri backup, e mi permette di simulare l&#8217;intera esecuzione prima di toccare qualcosa di reale. È quello che rende l&#8217;abitudine praticabile un martedì sera, invece che teorica in un articolo di blog.</p>



<p class="wp-block-paragraph">ISPConfig, MySQL, PHP, Dovecot, Pure-FTPd, Postfix e gli altri nomi citati sono marchi dei rispettivi proprietari. Sono usati solo per identificare i prodotti.</p><p>The post <a href="https://www.cisilino.com/2026/10/31/rotazione-credenziali-database-violazione-ispconfig/">Rotazione delle credenziali database dopo una violazione ISPConfig</a> first appeared on <a href="https://www.cisilino.com">Matteo Cisilino</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.cisilino.com/2026/10/31/rotazione-credenziali-database-violazione-ispconfig/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Vulnerabilità kernel Linux: un use-after-free nel TCP IPv4</title>
		<link>https://www.cisilino.com/2026/10/31/vulnerabilita-kernel-linux-tcp-cve-2026-98432/</link>
					<comments>https://www.cisilino.com/2026/10/31/vulnerabilita-kernel-linux-tcp-cve-2026-98432/#respond</comments>
		
		<dc:creator><![CDATA[matteocisilino]]></dc:creator>
		<pubDate>Sat, 31 Oct 2026 09:19:23 +0000</pubDate>
				<category><![CDATA[Server e database]]></category>
		<category><![CDATA[CVE]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[kernel Linux]]></category>
		<category><![CDATA[sicurezza server]]></category>
		<guid isPermaLink="false">https://www.cisilino.com/?p=1401</guid>

					<description><![CDATA[<p>Gestisco server Debian in produzione da anni. Ogni volta che esce una CVE sul kernel mi fermo a leggere i dettagli. Poi decido se aggiornare subito o aspettare. Questa volta la storia è più intricata del solito: c&#8217;è una vulnerabilità kernel Linux nel TCP IPv4, un punteggio CVSS conteso tra vendor, e persino un presunto [&#8230;]</p>
<p>The post <a href="https://www.cisilino.com/2026/10/31/vulnerabilita-kernel-linux-tcp-cve-2026-98432/">Vulnerabilità kernel Linux: un use-after-free nel TCP IPv4</a> first appeared on <a href="https://www.cisilino.com">Matteo Cisilino</a>.</p>]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">Gestisco server Debian in produzione da anni. Ogni volta che esce una CVE sul kernel mi fermo a leggere i dettagli. Poi decido se aggiornare subito o aspettare. Questa volta la storia è più intricata del solito: c&#8217;è una <strong>vulnerabilità kernel Linux</strong> nel TCP IPv4, un punteggio CVSS conteso tra vendor, e persino un presunto exploit root costruito da un&#8217;intelligenza artificiale. Partiamo da una domanda che sembra laterale, ma non lo è: cos&#8217;è MPTCP, e perché conta anche se non lo usi.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" src="https://www.cisilino.com/wp-content/uploads/2026/10/vulnerabilita-kernel-linux-tcp-cve-2026-98432.webp" alt="vulnerabilità kernel Linux nel TCP IPv4, pinguino stilizzato con scudo Debian corretto" width="1200" height="630"/></figure>



<h2 class="wp-block-heading">Cos&#8217;è MPTCP e perché riguarda anche chi non lo usa</h2>



<p class="wp-block-paragraph">Multipath TCP (MPTCP) è lo standard RFC 8684. Estende il TCP classico per far viaggiare una singola connessione su più percorsi di rete insieme. Un telefono può usare WiFi e rete cellulare nello stesso momento, per la stessa connessione. Un server con più interfacce può fare lo stesso, per ridondanza o per somma di banda. Apple lo usa in produzione fin da iOS 7, nel 2013, per Siri: è il caso d&#8217;uso reale più noto. Alcuni operatori mobili, per esempio in Corea del Sud, lo sfruttano per il bonding WiFi/LTE. Diversi data center lo adottano per il multi-homing tra uplink diversi. Nel kernel Linux mainline c&#8217;è dal 5.6.</p>



<p class="wp-block-paragraph">Il punto che mi ha fatto alzare un sopracciglio è un altro. Dalla versione 1.24, i programmi scritti in Go richiedono MPTCP di default per i socket in ascolto. Il Go Security Team l&#8217;ha confermato il 29 ottobre. Insieme, ha dato un avviso scomodo: il bug di cui parliamo oggi non è specifico di MPTCP. Un sistema senza listener MPTCP attivi può restare comunque esposto ad attacchi simili. Il codice vulnerabile è nel path TCP IPv4 generico, non in un modulo opzionale. Si può disattivare MPTCP programma per programma, con la variabile <code>GODEBUG=multipathtcp=0</code> a runtime. Ma il Go Security Team definisce questa mitigazione &#8220;fragile&#8221;: basta un solo listener MPTCP rimasto esposto per vanificarla. Nessuno ha dimostrato che ogni exploit funzionante dipenda davvero da MPTCP. Ecco perché il codice MPTCP resta superficie di attacco, anche se nel tuo stack non lo attivi mai consapevolmente: basta che sia compilato nel kernel e raggiungibile.</p>



<p class="wp-block-paragraph">Il progetto MPTCP stesso dichiara, sulla propria pagina, che le principali distribuzioni Linux correnti spediscono il kernel con il supporto MPTCP compilato di default (<code>CONFIG_MPTCP=y</code>). Nomina esplicitamente Debian, Ubuntu, RHEL e Fedora. È una dichiarazione del progetto stesso, non una verifica indipendente distro per distro, ma il concetto resta valido: il supporto è acceso a livello di kernel, non &#8220;opt-in&#8221; a livello di sistema operativo. Solo la negoziazione per singola connessione resta a carico dell&#8217;applicazione.</p>



<h2 class="wp-block-heading">La vulnerabilità kernel Linux CVE-2026-98432 in breve</h2>



<p class="wp-block-paragraph">Il CVE team del kernel Linux ha pubblicato la CVE-2026-98432 il 15 ottobre 2026. Il fix upstream era già stato applicato dieci giorni prima, il 5 ottobre. Capita spesso che la pubblicazione segua il commit con un certo ritardo. Il punteggio CVSS di 9,8 (critico) è arrivato solo il 24 ottobre, nove giorni dopo la pubblicazione della CVE.</p>



<p class="wp-block-paragraph">Il problema sta nella gestione dell&#8217;handshake TCP per IPv4, in particolare nella funzione <code>tcp_v4_syn_recv_sock()</code>. Quando una connessione viene creata, le opzioni IP del pacchetto SYN vengono passate dal request socket in attesa al nuovo socket. Per esempio Record Route o Timestamp, se il client le include in un SYN costruito ad arte. Il problema è che vengono passate per riferimento, non per copia, e senza il lock del listener. Secondo l&#8217;analisi tecnica della patch, le strutture coinvolte si chiamano <code>inet_opt</code> e <code>ireq_opt</code>. Una seconda CPU può liberare quel buffer con <code>kfree()</code>, chiamato da <code>inet_sock_destruct()</code> o da <code>tcp_v4_reqsk_destructor()</code>. Nel frattempo una prima CPU lo sta ancora leggendo in <code>ip_options_build()</code>, per costruire il SYNACK. È un classico use-after-free causato da una race condition. Il percorso IPv6 equivalente, <code>tcp_v6_syn_recv_sock()</code>, copia le opzioni invece di passarle per riferimento: non è vulnerabile alla race principale. Esiste anche una seconda via d&#8217;attacco, tramite la migrazione dei request-socket: <code>net.ipv4.tcp_migrate_req=1</code> oppure un programma eBPF <code>BPF_SK_REUSEPORT_SELECT_OR_MIGRATE</code>. Entrambe sono disattivate di default.</p>



<p class="wp-block-paragraph">Il bug è remoto e non richiede autenticazione né interazione dell&#8217;utente, secondo la valutazione del kernel team. È presente dalla versione 4.4 del kernel. Il fix è firmato da Eric Dumazet, segnalato da Xinyang Ge di Anthropic. Sposta la liberazione della memoria a dopo un grace period RCU, con <code>kfree_rcu()</code>: così nessuna CPU può più leggere un buffer già liberato. Le versioni stabili corrette sono 5.10.272, 5.15.223, 6.1.190, 6.6.159, 6.12.113, 6.18.56, 7.2.10 e la mainline dalla 7.3-rc7.</p>



<h2 class="wp-block-heading">Punteggi CVSS discordanti: non tutti i vendor sono d&#8217;accordo</h2>



<p class="wp-block-paragraph">Qui la storia si complica. Il kernel CVE team e Ubuntu valutano la complessità di attacco come bassa, e danno 9,8 (critico). Oracle e SUSE danno invece 8,1 (importante): stesso vettore CVSS, ma complessità di attacco alta. Red Hat, curiosamente, ha due valutazioni che non coincidono tra loro. La pagina CVE pubblica mostra &#8220;Moderate, 5.9&#8221;. Il file di advisory leggibile da macchina, aggiornato il 29 ottobre, mostra invece &#8220;Important, 8.1&#8221;, con impatto alto su confidenzialità e integrità. Lo stesso giorno il bug tracker interno di Red Hat ha alzato la severità da medium a high. Amazon, dal suo lato, assegna 7,0. Al momento in cui scrivo, l&#8217;NVD non ha ancora pubblicato un punteggio proprio.</p>



<p class="wp-block-paragraph">Vale la pena dirlo con onestà. Questa incongruenza interna a Red Hat non è un dettaglio che ho dedotto io: è riportata così dall&#8217;articolo originale di The Hacker News, la mia fonte principale per questi dati. Non è la prima volta che un vendor pubblica due numeri diversi per lo stesso bug, su canali diversi. Ma qui il salto da &#8220;moderato&#8221; a &#8220;importante&#8221; nello stesso giorno dice molto. Anche per chi scrive il codice, stimare con certezza lo sfruttabilità reale di una race condition nel kernel è difficile.</p>



<h2 class="wp-block-heading">Stato delle patch: Debian già corretto, altri ancora no</h2>



<p class="wp-block-paragraph">Questo è il punto che mi riguarda più da vicino: gli hosting che gestisco girano su Debian stable. E qui i fatti parlano chiaro, senza bisogno di aggiungere enfasi: <strong>Debian ha già corretto questa vulnerabilità kernel Linux</strong>, sia su trixie che su bookworm. Debian trixie (stable) è stata corretta il 16 ottobre 2026, con il pacchetto <code>linux 6.12.113-1</code>, avviso DSA-6568-1. Debian 12 (bookworm) è stata corretta in due passaggi: il 17 e il 22 ottobre 2026, con <code>linux 6.1.190-1</code> (avviso DLA-4841-1) e <code>linux-6.12 6.12.113-1~deb12u1</code> (avviso DLA-4850-1). Nella propria tabella di tracciamento, Debian non elenca un punteggio CVSS separato per questa CVE. Si limita a segnare lo stato di fix per ogni release: è l&#8217;informazione che conta davvero, per chi deve decidere se riavviare un server.</p>



<p class="wp-block-paragraph">Confrontare questo con lo stato di altre distribuzioni molto diffuse aiuta a dare peso alla cosa. Al 30 ottobre, Red Hat ha aggiornato lo stato di RHEL 8, 9, 10 e OpenShift 4. Prima era &#8220;fix deferred&#8221; (segnato il 29 ottobre), ora è &#8220;affected&#8221;. Nessuna data di rilascio è stata comunicata. Ubuntu, su tutte le versioni supportate (22.04, 24.04, 26.04, 26.10), risulta ancora &#8220;in lavorazione&#8221;, senza una data. Ubuntu 16.04, 18.04 e 20.04 risultano vulnerabili, senza nemmeno un fix elencato. SUSE Linux Enterprise Server, dalla SP4 alla SP7 più la 16.0, è nella stessa situazione. Oracle Linux (UEK), openSUSE Leap 16.0, SUSE Linux Micro 6.2 e Amazon Linux 2023 risultano invece già corretti. RHEL 7 non è affetto: il percorso di codice vulnerabile non è mai stato distribuito su quella release.</p>



<p class="wp-block-paragraph">Non lo dico per fare concorrenza a Ubuntu o RHEL. Restano distribuzioni serie, con processi di sicurezza robusti. Lo dico perché su questo singolo bug, in questa finestra temporale, i fatti sono questi: chi si affida a hosting basati su Debian stable ha già il fix installato. Su altre distribuzioni molto usate, invece, il server resta esposto per un periodo indefinito. È un vantaggio concreto, verificabile guardando le date. Non è un&#8217;opinione sul progetto Debian in generale.</p>



<h2 class="wp-block-heading">L&#8217;exploit (riportato, non verificato in modo indipendente) di Anthropic</h2>



<p class="wp-block-paragraph">La parte più insolita di questa storia riguarda Anthropic, l&#8217;azienda che per prima ha segnalato il bug tramite Xinyang Ge. Secondo i report di settore, uno dei suoi modelli AI interni, non rilasciato pubblicamente, ha costruito da solo un exploit root funzionante. Partendo solo dalla patch e dal report come prompt. L&#8217;attacco in due fasi funzionerebbe così. Nella prima fase, la race fa inviare all&#8217;attaccante byte extra dalla risposta del kernel. Da lì recupera un indirizzo kernel, per disinnescare KASLR. Nella seconda fase, lo stesso bug causerebbe un overflow di buffer. Sovrascrive un puntatore di callback con l&#8217;indirizzo di un payload già piazzato in memoria kernel dall&#8217;attaccante. Quando il kernel chiama quel puntatore, il payload esegue un comando shell a scelta come root. Una race persa farebbe fallire solo quel singolo tentativo di connessione, senza crashare il sistema: quindi sarebbero possibili tentativi ripetuti. Nel test descritto da Anthropic: 48 minuti per rubare l&#8217;indirizzo kernel, altri 5 minuti per arrivare all&#8217;esecuzione di comandi.</p>



<p class="wp-block-paragraph">Red Hat dice che un attaccante remoto che raggiunge un servizio TCP esposto può in generale innescare la race. L&#8217;exploit root descritto da Anthropic, però, avrebbe preso di mira specificamente server con un listener multipath TCP attivo. Il post di Anthropic non chiarisce se un server senza MPTCP sia sfruttabile allo stesso modo. Né il record CVE né il fix upstream menzionano MPTCP in nessun punto. È la stampa di settore, non una fonte primaria, a riportare questo legame: lo scrivo quindi con lo scetticismo che merita, non come un fatto accertato al cento per cento. Anthropic non ha pubblicato il codice dell&#8217;exploit, né la versione esatta del kernel usata, né la configurazione del server target. Un&#8217;altra società, Innora, ha pubblicato un&#8217;analisi della causa radice, con un ambiente di riproduzione QEMU. Ha dichiarato che non rilascerà un exploit armato nel breve termine. Al momento non ci sono prove di sfruttamento reale da parte di vendor o CERT. Il bug non è nel catalogo CISA KEV, secondo la copia aggiornata da CIRCL del Lussemburgo al 28 ottobre.</p>



<h2 class="wp-block-heading">Cosa fare adesso sui tuoi server</h2>



<p class="wp-block-paragraph">Nessun vendor ha pubblicato un workaround ufficialmente sanzionato per questa <strong>vulnerabilità kernel Linux</strong>. Red Hat dice esplicitamente che nessuna delle misure circolate finora raggiunge il suo standard di facilità di deploy e di stabilità. La mitigazione primaria resta applicare il kernel corretto e riavviare, quando la patch è disponibile per la tua distribuzione. Su Debian lo è già. Su RHEL e Ubuntu ancora no, al momento in cui scrivo.</p>



<p class="wp-block-paragraph">Come difesa in profondità, non come soluzione definitiva, ha senso fare alcune cose. Verificare che <code>net.ipv4.tcp_migrate_req</code> sia impostato a 0. Controllare che non ci siano programmi eBPF <code>BPF_SK_REUSEPORT_SELECT_OR_MIGRATE</code> caricati. Valutare un filtraggio dei pacchetti IPv4 in ingresso con opzioni Record Route o Timestamp. Monitorare eventuali crash che citano <code>ip_options_build</code>, <code>ip_build_and_send_pkt</code> o <code>skb_under_panic</code>. Fare l&#8217;inventario di eventuali listener MPTCP esposti, evitando di lasciarli raggiungibili senza motivo. Se gestisci anche servizi contro attacchi applicativi più comuni, su <a href="https://www.cisilino.com/2026/10/29/php2shell-cve-2026-109618-mitigazione-server/">come ho protetto i server in attesa della patch per PHP2Shell</a> trovi lo stesso approccio: mitigare quello che si può, mentre si aspetta il fix definitivo, senza promettere protezioni che non esistono.</p>



<p class="wp-block-paragraph">Per chi mi chiede se aggiornare subito: se usi Debian stable, il kernel corretto è già nei repository di sicurezza. L&#8217;aggiornamento è semplice, e la finestra di esposizione è già chiusa. Se usi altre distribuzioni, oggi non c&#8217;è ancora una patch da installare. Vale la pena seguire da vicino gli avvisi del tuo vendor nei prossimi giorni: la situazione cambia rapidamente.</p>



<p class="wp-block-paragraph">Fonti: <a href="https://thehackernews.com/2026/10/linux-kernel-tcp-flaw-with-98-cvss.html" target="_blank" rel="nofollow noopener">The Hacker News</a>, <a href="https://security-tracker.debian.org/tracker/CVE-2026-98432" target="_blank" rel="nofollow noopener">Debian Security Tracker</a> e il <a href="https://github.com/torvalds/linux/commit/e3f33b0a1d89d738e2b913dab519226eaf76e15b" target="_blank" rel="noopener">commit del fix</a>. Debian, Red Hat, Ubuntu e gli altri nomi citati sono marchi dei rispettivi proprietari.</p><p>The post <a href="https://www.cisilino.com/2026/10/31/vulnerabilita-kernel-linux-tcp-cve-2026-98432/">Vulnerabilità kernel Linux: un use-after-free nel TCP IPv4</a> first appeared on <a href="https://www.cisilino.com">Matteo Cisilino</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.cisilino.com/2026/10/31/vulnerabilita-kernel-linux-tcp-cve-2026-98432/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Log email WordPress: perché lo controllo con FluentSMTP</title>
		<link>https://www.cisilino.com/2026/10/31/log-email-wordpress-fluentsmtp/</link>
					<comments>https://www.cisilino.com/2026/10/31/log-email-wordpress-fluentsmtp/#respond</comments>
		
		<dc:creator><![CDATA[matteocisilino]]></dc:creator>
		<pubDate>Sat, 31 Oct 2026 08:00:00 +0000</pubDate>
				<category><![CDATA[Server e database]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[FluentSMTP]]></category>
		<category><![CDATA[plugin WordPress]]></category>
		<category><![CDATA[SMTP]]></category>
		<guid isPermaLink="false">https://www.cisilino.com/?p=1249</guid>

					<description><![CDATA[<p>Gestisco diversi siti WordPress. Su ognuno parte un numero di email che nessuno immagina: notifiche di contatto, reset password, conferme d&#8217;ordine, avvisi ai gestori. Il log email WordPress di FluentSMTP è lo strumento che controllo appena un cliente mi scrive &#8220;non ho ricevuto niente&#8221;. Prima guardavo i log del server SMTP a riga di comando. [&#8230;]</p>
<p>The post <a href="https://www.cisilino.com/2026/10/31/log-email-wordpress-fluentsmtp/">Log email WordPress: perché lo controllo con FluentSMTP</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 siti WordPress. Su ognuno parte un numero di email che nessuno immagina: notifiche di contatto, reset password, conferme d&#8217;ordine, avvisi ai gestori. Il log email WordPress di FluentSMTP è lo strumento che controllo appena un cliente mi scrive &#8220;non ho ricevuto niente&#8221;. Prima guardavo i log del server SMTP a riga di comando. Dovevo far corrispondere a mano grep e timestamp. Ora apro una pagina nel pannello di WordPress e ho tutto davanti.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" src="https://www.cisilino.com/wp-content/uploads/2026/10/fluent-smtp-log-invii-email-wordpress.webp" alt="log email WordPress visto nel pannello di FluentSMTP" width="1200" height="630"/></figure>



<h2 class="wp-block-heading">Perché controllo il log email WordPress prima dei log del server</h2>



<p class="wp-block-paragraph">Il caso tipico è sempre lo stesso. Un modulo di contatto che &#8220;non arriva&#8221;. Un cliente che non riceve l&#8217;email di reset password. Un ordine che resta senza conferma. Senza un log a portata di mano, la prima ipotesi è la cartella spam. Poi i log del server SMTP. Poi magari il firewall. Con FluentSMTP salto quei passaggi. Vedo subito se WordPress ha davvero provato a spedire quell&#8217;email. A chi, quando, con quale risposta del server di invio.</p>



<p class="wp-block-paragraph">FluentSMTP registra ogni chiamata a <code>wp_mail()</code>. Non solo le email dei plugin di terze parti, anche quelle generate dal core: notifiche di nuovo utente, promemoria di aggiornamento, avvisi di errore. Per ogni invio il log mostra mittente, destinatario, oggetto, intestazioni complete, corpo del messaggio. E la risposta del provider SMTP o dell&#8217;API usata. Se un&#8217;email è finita in errore, quella risposta del server è lì. Non devo indovinarla.</p>



<h2 class="wp-block-heading">Cosa trovo davvero nel registro degli invii</h2>



<p class="wp-block-paragraph">Il plugin supporta decine di connettori: Amazon SES, SendGrid, Mailgun, Brevo, Postmark, SparkPost. Anche Google Workspace e Microsoft 365 via OAuth, oltre al classico SMTP generico. Sui siti che gestisco uso quasi sempre SMTP autenticato con il dominio del cliente. Qualche volta un&#8217;API dedicata, quando il volume di email cresce. In entrambi i casi il log email WordPress non cambia. Ogni riga ha uno stato, inviata o fallita. C&#8217;è un pulsante per rivedere il contenuto o rispedire il messaggio, senza che l&#8217;utente debba rifare l&#8217;azione che l&#8217;ha generato.</p>



<p class="wp-block-paragraph">Il rinvio manuale è la funzione che uso più spesso. Un modulo compilato due volte perché &#8220;non arrivava&#8221; diventa un clic sul log. Non una nuova segnalazione al cliente. Per i fallimenti ripetuti ho attivato le notifiche su Telegram. Appena una connessione smette di funzionare, lo so prima che me lo scriva qualcuno. Invece di scoprirlo da un ticket di supporto.</p>



<p class="wp-block-paragraph">Il log non riguarda solo le notifiche dirette a me o al cliente che amministra il sito. Finisce lì ogni email in uscita generata dal sito verso terzi: la conferma d&#8217;ordine che un negozio online manda al cliente finale, la ricevuta di un pagamento, la notifica di spedizione. Se quella conferma non arriva, la vedo nel log email WordPress esattamente come una notifica interna, con lo stesso pulsante per rispedirla al destinatario giusto senza fargli ripetere l&#8217;acquisto.</p>



<h2 class="wp-block-heading">Come configuro FluentSMTP sui siti che gestisco</h2>



<p class="wp-block-paragraph">Dopo aver collegato il connettore giusto, cambio la conservazione del log. Di default resta attivo a lungo. Io lo porto a 30-60 giorni, in base al traffico del sito. Serve per risalire a un problema segnalato in ritardo. Senza riempire il database di righe che non consulterò mai. Attivo poi almeno un canale di notifica per i fallimenti, Telegram o Slack secondo il cliente. Il log da solo non avvisa nessuno: va aperto per essere letto.</p>



<p class="wp-block-paragraph">Sui siti con form di contatto uso anche <a href="https://www.cisilino.com/2026/10/29/plugin-sicurezza/">Cisilino Site Defense Network</a> per il blocco dei bot. Meno spam in ingresso significa meno email generate dai moduli. Il log resta più leggibile, con meno rumore da filtrare quando cerco il messaggio giusto.</p>



<h2 class="wp-block-heading">Le credenziali SMTP non restano in chiaro nel database</h2>



<p class="wp-block-paragraph">Un dettaglio che controllo sempre prima di salvare una connessione: dove finiscono le credenziali. FluentSMTP le cifra di default con le chiavi SALT di WordPress, quelle già presenti in <code>wp-config.php</code> per sicurezza delle sessioni. Si può disattivare la cifratura, ma il plugin stesso lo segnala come sconsigliato. Sui siti che gestisco preferisco un&#8217;altra opzione: salvare la password API o SMTP direttamente in <code>wp-config.php</code>, fuori dal database, definendo le costanti prima che il plugin le legga. Così anche un dump del database o un accesso non autorizzato al pannello non espone la chiave del provider di invio. È lo stesso principio che applico altrove: meno segreti nel database, meglio è.</p>



<h2 class="wp-block-heading">Più connessioni insieme, non solo una alla volta</h2>



<p class="wp-block-paragraph">FluentSMTP permette di configurare più connessioni insieme, non solo una alla volta. Su un sito imposto quella predefinita e ne aggiungo una seconda come riserva: se il primo provider non risponde, l&#8217;invio passa automaticamente alla connessione di riserva, senza che io debba intervenire. La scelta della connessione dipende dall&#8217;indirizzo del mittente: ogni connessione ha il suo &#8220;From&#8221;, il resto passa per quella predefinita, con la riserva pronta solo se la predefinita fallisce davvero (un errore del provider, non un&#8217;email finita in spam). È una delle ragioni per cui lo preferisco a un singolo SMTP senza alternative: se SendGrid o Amazon SES hanno un problema per qualche ora, il sito continua comunque a spedire, e lo vedo subito nel log email WordPress. Tutto incluso nella versione gratuita, senza una versione pro a pagamento: si paga solo il provider di invio scelto, non il plugin.</p>



<h2 class="wp-block-heading">Un controllo di salute ogni giorno, non solo quando qualcosa si rompe</h2>



<p class="wp-block-paragraph">Oltre al log riga per riga, FluentSMTP fa un controllo di salute della connessione ogni giorno, in automatico. Se il provider smette di rispondere, l&#8217;avviso arriva prima che un cliente mi scriva &#8220;il sito non manda più email&#8221;. Lo stesso pannello mostra un grafico con i totali giornalieri di invii riusciti e falliti: utile per capire a colpo d&#8217;occhio se un calo è normale o è il sintomo di qualcosa che si sta rompendo, senza dover aprire il log email WordPress riga per riga ogni volta. C&#8217;è anche un riepilogo periodico via email, con i totali della settimana: non è un avviso di errore, è un bollettino che leggo di sfuggita per sapere se il volume di invii è nella norma.</p>



<p class="wp-block-paragraph">Per chi, come me, gestisce più siti da riga di comando, FluentSMTP espone anche dei comandi WP-CLI: un test di invio, un controllo di salute della connessione, le statistiche e la pulizia dei log vecchi. Li uso negli stessi script che già girano sui server per altri controlli di manutenzione, senza dover aprire il pannello di ogni sito uno per uno.</p>



<h2 class="wp-block-heading">I limiti onesti del log email WordPress</h2>



<p class="wp-block-paragraph">Non è una soluzione magica. La conservazione è basata sui giorni, non su un numero massimo di righe. Su un sito con molto traffico transazionale la tabella del log può crescere in fretta. Conviene tenerla sotto controllo, o impostare una conservazione più breve. Le notifiche di fallimento arrivano solo sui canali di chat configurati, non per email. Ha senso: un&#8217;email che avvisa di un&#8217;email fallita rischia di fallire a sua volta. Ma va saputo prima di contarci.</p>



<p class="wp-block-paragraph">Infine il log registra cosa è successo lato WordPress e lato provider. Non garantisce la consegna nella casella del destinatario. Se un&#8217;email è segnata come inviata ma finisce in spam, è un problema di reputazione del dominio o di configurazione SPF/DKIM. Non qualcosa che un log può risolvere da solo. Resta comunque il primo posto dove guardo, prima di qualsiasi altra verifica.</p>



<p class="wp-block-paragraph">Il plugin è gratuito e open source. Pagina ufficiale su <a href="https://wordpress.org/plugins/fluent-smtp/" target="_blank" rel="nofollow noopener">wordpress.org</a>, senza funzioni bloccate dietro una versione pro. Per chi gestisce anche un solo sito con un modulo di contatto, vale la pena installarlo solo per il log email WordPress. La prima volta che risolve un &#8220;non ho ricevuto l&#8217;email&#8221; in un minuto invece che in mezz&#8217;ora, si è ripagato.</p><p>The post <a href="https://www.cisilino.com/2026/10/31/log-email-wordpress-fluentsmtp/">Log email WordPress: perché lo controllo con FluentSMTP</a> first appeared on <a href="https://www.cisilino.com">Matteo Cisilino</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.cisilino.com/2026/10/31/log-email-wordpress-fluentsmtp/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Disattivazione, disinstallazione e dati personali</title>
		<link>https://www.cisilino.com/2026/10/30/manuale-csdn-disattivazione-disinstallazione/</link>
					<comments>https://www.cisilino.com/2026/10/30/manuale-csdn-disattivazione-disinstallazione/#respond</comments>
		
		<dc:creator><![CDATA[matteocisilino]]></dc:creator>
		<pubDate>Fri, 30 Oct 2026 16:06:04 +0000</pubDate>
				<category><![CDATA[Manuale CSDN]]></category>
		<category><![CDATA[Cisilino Site Defense Network]]></category>
		<category><![CDATA[manuale CSDN]]></category>
		<category><![CDATA[privacy]]></category>
		<guid isPermaLink="false">https://www.cisilino.com/?p=987</guid>

					<description><![CDATA[<p>Cosa accade quando disattivi o elimini Cisilino Site Defense Network, quali dati restano e come citarli nell'informativa privacy.</p>
<p>The post <a href="https://www.cisilino.com/2026/10/30/manuale-csdn-disattivazione-disinstallazione/">Disattivazione, disinstallazione e dati personali</a> first appeared on <a href="https://www.cisilino.com">Matteo Cisilino</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Prima di disinstallare il plugin CSDN conviene sapere la differenza tra disattivarlo e cancellarlo, perché le conseguenze sono diverse. La disattivazione spegne le regole e conserva i dati. La disinstallazione cancella i dati del plugin dal tuo sito. In fondo trovi anche l&#8217;elenco dei dati personali trattati, da citare nell&#8217;informativa privacy.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" src="https://www.cisilino.com/wp-content/uploads/2026/10/manuale-csdn-disattivazione-disinstallazione.webp" alt="Schema del menu Plugin installati di WordPress per disinstallare il plugin CSDN con Disattiva ed Elimina" width="1200" height="630"/></figure>
<h2>Dove si trova</h2>
<p>Apri la voce <strong>Plugin &gt; Plugin installati</strong> (punto 1 dell&#8217;immagine). Nella riga di <strong>Cisilino Site Defense Network</strong> (punto 3) trovi il link <strong>Disattiva</strong>. Dopo la disattivazione (punto 4) la stessa riga mostra <strong>Attiva</strong> ed <strong>Elimina</strong>.</p>
<h2>Cosa succede alla disattivazione</h2>
<p>Disattivare il plugin lo ferma senza toccare i dati. Alla disattivazione il plugin fa quattro cose.</p>
<ol>
<li>registra l&#8217;evento “Plugin disattivato su questo sito” e prova a consegnarlo al pannello, se è configurato.</li>
<li>cancella le tre attività pianificate.</li>
<li>svuota entrambi i blocchi di <code>.htaccess</code>, quello degli IP bloccati e quello dell&#8217;hardening.</li>
<li>aggiorna le regole di riscrittura di WordPress.</li>
</ol>
<p><strong>Attenzione:</strong> da disattivato non resta in vigore nessuna regola. Gli IP bloccati tornano a poter accedere e l&#8217;hardening non è più applicato. Il plugin non è nemmeno caricato, quindi non agiscono le altre protezioni. Smettono anche gli header di sicurezza, ma un browser che ha già ricevuto HSTS lo ricorda per il tempo impostato.</p>
<p>Il database resta intatto. Se riattivi il plugin, i blocchi di <code>.htaccess</code> vengono ricostruiti e trovi le impostazioni come le avevi lasciate.</p>
<h2>Come disinstallare il plugin</h2>
<p>Per disinstallare il plugin devi premere <strong>Elimina</strong> in <strong>Plugin installati</strong>, dopo averlo disattivato. Prima di farlo, segui questi passi.</p>
<ol>
<li>Nella scheda <strong>Registro attività</strong> controlla che la riga “in attesa di invio al pannello” sia a zero, se usi il pannello.</li>
<li>Nella scheda <strong>Log di debug</strong>, scarica i file che ti servono. Poi, se vuoi, premi <strong>Elimina tutti i file</strong>.</li>
<li>Fai una copia di sicurezza, se non l&#8217;hai già fatta.</li>
<li>Disattiva il plugin e premi <strong>Elimina</strong>.</li>
</ol>
<h2>Cosa viene rimosso e cosa resta</h2>
<p>Quando scegli di disinstallare il plugin, all&#8217;inizio lui registra “Plugin disinstallato da questo sito: dati locali rimossi” e prova a consegnarlo al pannello. Poi cancella, comunque sia andata la consegna.</p>
<p>Viene rimosso quanto segue.</p>
<ul>
<li>le quattro tabelle <code>csdn_events</code>, <code>csdn_overrides</code>, <code>csdn_rate_hits</code> e <code>csdn_activity</code>.</li>
<li>quasi tutte le opzioni il cui nome inizia per <code>csdn_</code>, comprese le credenziali del pannello, la whitelist e le impostazioni delle schede. Ne restano tre, elencate più sotto.</li>
<li>il dato di sospensione del rate limiting su tutti gli utenti.</li>
<li>i dati temporanei del plugin.</li>
<li>le regole dei due blocchi del plugin in <code>.htaccess</code> e le regole di riscrittura. I marcatori <code># BEGIN</code> e <code># END</code> restano nel file, vuoti.</li>
</ul>
<p>Resta invece quanto segue.</p>
<ul>
<li>i file del log di debug nella cartella <code>csdn-debug-*</code> dentro <code>uploads</code>, perché sono dati tuoi: cancellali a mano oppure con il pulsante <strong>Elimina tutti i file</strong> prima di disinstallare.</li>
<li>lo storico già consegnato al pannello, che si trova sul pannello e non sul tuo sito.</li>
<li>le righe di <code>.htaccess</code> che stanno fuori dai marcatori del plugin.</li>
<li>tre opzioni minori: <code>csdn_registration_lock</code> (la policy di Registrazione utenti), <code>csdn_remote_ban_reasons</code> (motivi dei blocchi ricevuti) e <code>csdn_trigger_token</code> (token ricevuto dal pannello). Restano anche il dato utente <code>csdn_registration_blocked_at</code>, se presente, e i dati temporanei <code>csdn_rl_block_*</code>, che scadono da soli. Si possono togliere a mano dal database.</li>
</ul>
<p><strong>Attenzione:</strong> disinstallare il plugin cancella anche il registro attività locale. Le righe non ancora consegnate al pannello, se il pannello non risponde, si perdono.</p>
<h2>Dati personali trattati dal plugin</h2>
<p>Il plugin tiene i dati sul tuo sito, nel database. Mai la password. Ecco cosa tratta.</p>
<ul>
<li><strong>Login falliti</strong>: indirizzo IP, nome utente provato, numero di tentativi, prima e ultima occorrenza, stato di blocco. Non c&#8217;è una cancellazione automatica: restano nel database finché non disinstalli il plugin.</li>
<li><strong>Registro attività</strong>: data e ora, utente WordPress (id, login, ruolo), IP, tipo di azione, oggetto coinvolto (per i contenuti, il titolo) e una breve descrizione. In alcuni casi aggiunge dettagli: per un nuovo utente l&#8217;email e i ruoli, per una modifica di profilo il valore precedente e quello nuovo di email, login, nome visualizzato e sito web. Non salva il contenuto di articoli, commenti o file. Per le opzioni con nome sospetto, come chiavi o token, registra solo che sono cambiate.</li>
<li><strong>Rate limiting</strong>: IP e tipo di invio degli ospiti, conservati un giorno. Le sospensioni degli autori stanno nei dati dell&#8217;utente.</li>
<li><strong>Override IP, whitelist e blacklist ricevuta</strong>.</li>
<li><strong>Log di debug</strong>, se lo accendi: file che possono contenere percorsi e frammenti di dati.</li>
</ul>
<p>Il registro locale tiene di default 30 giorni e al massimo 500 righe. Puoi cambiare entrambi i valori nella scheda <strong>Registro attività</strong>.</p>
<h3>Cosa esce dal sito</h3>
<p>Solo se colleghi il pannello. Ogni 15 minuti il plugin invia i login falliti: IP, nome utente, esito “failed” e data. Ne manda fino a 200 per volta. Aggiunge il customer code e l&#8217;URL del sito. Riceve gli IP bloccati. Il registro attività, con i dettagli sopra, viene inviato di norma subito, a fine richiesta, e ciò che resta in coda parte col giro dei 15 minuti. Parte solo se sono attivi sia il registro sia l&#8217;opzione “Invia le attività al pannello”. Gli override manuali non vengono mai inviati.</p>
<h3>Cosa scrivere nell&#8217;informativa privacy</h3>
<p>Finché non decidi di disinstallare il plugin, nell&#8217;informativa del sito indica almeno questi punti.</p>
<ul>
<li>che il sito registra IP e nome utente dei tentativi di accesso falliti, per ragioni di sicurezza.</li>
<li>che tiene un registro delle azioni degli utenti, con IP, e per quanti giorni lo conserva.</li>
<li>che, se hai collegato il pannello, alcuni di questi dati vengono inviati al servizio esterno.</li>
<li>chi è il titolare e come gli utenti possono esercitare i loro diritti.</li>
</ul>
<p>Adatta il testo alla tua situazione, con il tuo consulente se ne hai uno: il manuale non sostituisce un parere legale. Per le basi sui plugin la <a href="https://wordpress.org/documentation/article/manage-plugins/" target="_blank" rel="noopener">guida ufficiale di WordPress</a> spiega anche la differenza tra disattivare ed eliminare.</p>
<h2>Se qualcosa non va</h2>
<p>Se dopo la disattivazione il sito dà errore, controlla <code>.htaccess</code> via FTP e guarda il capitolo <a href="https://www.cisilino.com/?p=986">Risoluzione dei problemi e domande frequenti</a>. Se hai deciso di disinstallare il plugin per errore, i dati locali non tornano: serve una copia di sicurezza del sito.</p>
<p>Capitolo precedente: <a href="https://www.cisilino.com/?p=986">Risoluzione dei problemi e domande frequenti</a>. Torna all&#8217;indice con l&#8217;<a href="https://www.cisilino.com/?p=972">introduzione al manuale CSDN</a>.</p><p>The post <a href="https://www.cisilino.com/2026/10/30/manuale-csdn-disattivazione-disinstallazione/">Disattivazione, disinstallazione e dati personali</a> first appeared on <a href="https://www.cisilino.com">Matteo Cisilino</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.cisilino.com/2026/10/30/manuale-csdn-disattivazione-disinstallazione/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Risoluzione dei problemi e domande frequenti</title>
		<link>https://www.cisilino.com/2026/10/30/manuale-csdn-risoluzione-problemi/</link>
					<comments>https://www.cisilino.com/2026/10/30/manuale-csdn-risoluzione-problemi/#respond</comments>
		
		<dc:creator><![CDATA[matteocisilino]]></dc:creator>
		<pubDate>Fri, 30 Oct 2026 16:06:02 +0000</pubDate>
				<category><![CDATA[Manuale CSDN]]></category>
		<category><![CDATA[Cisilino Site Defense Network]]></category>
		<category><![CDATA[domande frequenti]]></category>
		<category><![CDATA[manuale CSDN]]></category>
		<guid isPermaLink="false">https://www.cisilino.com/?p=986</guid>

					<description><![CDATA[<p>Le soluzioni ai problemi tipici di Cisilino Site Defense Network: blocchi, errori 500, sospensioni, pannello e log.</p>
<p>The post <a href="https://www.cisilino.com/2026/10/30/manuale-csdn-risoluzione-problemi/">Risoluzione dei problemi e domande frequenti</a> first appeared on <a href="https://www.cisilino.com">Matteo Cisilino</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Questa pagina di risoluzione problemi raccoglie le situazioni in cui Cisilino Site Defense Network può metterti in difficoltà, con la soluzione per ciascuna. Ti serve se ti sei bloccato da solo, se il sito risponde con un errore 500 o se un utente non riesce più a pubblicare. Le risposte sono organizzate come domande frequenti.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" src="https://www.cisilino.com/wp-content/uploads/2026/10/manuale-csdn-risoluzione-problemi.webp" alt="Elenco di controllo per la risoluzione problemi del plugin CSDN, con i passi da seguire" width="1200" height="630"/></figure>
<h2>Risoluzione problemi: da dove cominciare</h2>
<p>Prima di cercare la risposta esatta, passa in rassegna questo elenco di controllo.</p>
<ol>
<li>Riesci ancora ad aprire <code>wp-admin</code>? Se sì, quasi tutto si risolve dalla pagina Impostazioni del plugin.</li>
<li>Leggi gli avvisi in alto. Il plugin spiega l&#8217;esito delle azioni con messaggi in riquadri colorati.</li>
<li>Ricorda l&#8217;ultima cosa che hai cambiato: una regola di hardening, una policy, un limite.</li>
<li>Se esiste un pulsante <strong>Verifica ora</strong> o <strong>Verifica adesso</strong>, usalo prima di tirare a indovinare.</li>
<li>Se non entri più nel sito, prepara l&#8217;accesso FTP o il file manager dell&#8217;hosting.</li>
</ol>
<h2>Accessi e blocchi</h2>
<h3>Mi sono bloccato da solo: che cosa faccio?</h3>
<p>Se hai ancora accesso a WordPress, per esempio dal telefono con la rete mobile, apri la scheda <strong>IP bloccati</strong>. Cerca il tuo IP e premi <strong>Sblocca</strong>. Se il tuo IP non è in elenco ma sei bloccato (può venire dalla lista di sicurezza opzionale), vai nella scheda <strong>Generale</strong>, sezione “Override locali IP”: inserisci l&#8217;IP, scegli “Sblocca sempre (unban)” e premi <strong>Salva override</strong>. Poi, nella scheda <strong>Generale</strong>, premi <strong>Aggiungi alla whitelist</strong>.</p>
<p>Se sei bloccato anche dal sito, e vedi un errore 403, entra via FTP e apri <code>.htaccess</code>. Togli la riga con il tuo IP, oppure l&#8217;intero blocco tra <code># BEGIN Cisilino Site Defense Network</code> e <code># END Cisilino Site Defense Network</code>.</p>
<p><strong>Attenzione:</strong> la modifica a mano è temporanea. Il blocco viene riscritto dalla stessa fonte al prossimo evento: un login fallito, una sincronizzazione o il giro ogni 15 minuti. Appena sei dentro, usa <strong>Sblocca</strong> e la whitelist.</p>
<h3>Perché la whitelist non mi ha sbloccato?</h3>
<p>La whitelist evita solo che i login falliti vengano contati. Non toglie i blocchi già presenti. Per togliere un blocco serve <strong>Sblocca</strong>, che crea un override permanente di sblocco su questo sito.</p>
<h3>Un utente legittimo è stato bloccato</h3>
<p>Il contatore dei tentativi è cumulativo per IP e non si azzera da solo. Anche errori sparsi in settimane possono arrivare alla soglia, che di default è 10. Sblocca l&#8217;IP e mettilo in whitelist, oppure alza la soglia in <strong>Impostazioni remote</strong>, dove il campo è “Soglia blocco locale (tentativi falliti)”.</p>
<h3>Il blocco di un IP non finisce mai</h3>
<p>Un blocco locale non scade. Un blocco manuale scade con la durata scelta, da 1 ora a 7 giorni. Se hai scelto “Permanente (finché non lo rimuovi)”, non scade. Un blocco ricevuto dal pannello sparisce quando il pannello lo toglie dalla lista. Uno sblocco a tempo, scadendo, fa tornare il blocco se la fonte originale è ancora lì. Per uno sblocco definitivo usa <strong>Sblocca</strong>, che è permanente.</p>
<h3>Dietro un proxy o una CDN i blocchi sono strani</h3>
<p>Il plugin legge l&#8217;IP solo da <code>REMOTE_ADDR</code> e ignora l&#8217;header <code>X-Forwarded-For</code>, perché si può falsificare. Guarda la frase “Il tuo IP attuale è …” sotto il campo <strong>Indirizzo IP</strong> della scheda <strong>Generale</strong>. Se non è il tuo IP pubblico, il plugin sta vedendo l&#8217;indirizzo del proxy. In quel caso evita di bloccare o mettere in whitelist quell&#8217;indirizzo, finché non hai chiarito la situazione con chi gestisce il proxy.</p>
<h2>Errori dopo le regole in .htaccess</h2>
<p>Questa parte della risoluzione problemi riguarda le regole scritte nel file del server.</p>
<h3>Il sito dà errore 500 dopo aver salvato l&#8217;hardening</h3>
<p>Il plugin non crea una copia di <code>.htaccess</code> e non controlla la sintassi dopo la scrittura. Un errore, o una regola che il server non accetta, si vede subito come errore 500.</p>
<ol>
<li>Entra via FTP o dal file manager.</li>
<li>Fai una copia di <code>.htaccess</code>.</li>
<li>Elimina il blocco tra <code># BEGIN Cisilino Site Defense Network - Hardening</code> e <code># END Cisilino Site Defense Network - Hardening</code>.</li>
<li>Ricarica il sito, poi correggi le impostazioni nella scheda <strong>Hardening / IDS</strong>.</li>
</ol>
<p>Il blocco dell&#8217;hardening viene riscritto solo quando salvi la scheda o riattivi il plugin, non dal giro ogni 15 minuti. La tua modifica a mano quindi resta.</p>
<h3>Ho scritto un percorso personalizzato e tutto il sito dà 403</h3>
<p>Nella casella dei percorsi personalizzati ogni riga è testo letterale, senza jolly. La regola blocca ogni indirizzo che contiene quella stringa. Scrivere <code>/</code> o <code>wp</code> blocca tutto, compreso <code>wp-admin</code>. Togli via FTP il blocco dell&#8217;hardening, come sopra. Poi, nella scheda <strong>Hardening / IDS</strong>, correggi o svuota la casella “Percorsi personalizzati da bloccare” e salva. Se non la correggi, un nuovo salvataggio o una riattivazione del plugin riscrive la regola e il sito torna a dare 403.</p>
<h3>Compare “Impostazioni salvate, ma la scrittura in .htaccess è fallita”</h3>
<p>Il file <code>.htaccess</code> non è scrivibile: controlla i permessi. Le regole di quel blocco non sono attive. Restano invece attivi i due interruttori che agiscono in PHP, cioè XML-RPC e <code>?author=N</code>.</p>
<h3>Il test dice che il blocco PHP in uploads non funziona</h3>
<p>Nella scheda <strong>Test</strong>, il riquadro “Verifica blocco esecuzione PHP in uploads” segnala se il file di prova è stato eseguito. Controlla che l&#8217;hosting permetta <code>.htaccess</code> in quella cartella e che non esista un blocco <code>&lt;Directory&gt;</code> più specifico. Su nginx le regole non hanno effetto. La regola copre solo la cartella <code>uploads</code> standard.</p>
<h3>Un plugin o il tema hanno smesso di funzionare</h3>
<p>Spegni l&#8217;ultima regola che hai attivato e salva. I casi più comuni: il blocco del PHP in <code>uploads</code> rompe i plugin che ci scrivono file PHP; la disabilitazione di XML-RPC ferma app e funzioni remote; il blocco dei caricamenti eseguibili rifiuta anche file come <code>.svg</code>.</p>
<h2>Utenti, autori e visitatori</h2>
<h3>Un autore non può più pubblicare: “il tuo account è sospeso”</h3>
<p>Il rate limiting ha visto troppi contenuti creati in poco tempo. Di default il limite è 150 contenuti in 300 secondi, con sospensione di 3600 secondi. Dalla scheda <strong>Rate limiting</strong>, nella tabella degli utenti sospesi, premi <strong>Revoca sospensione</strong>. Altrimenti aspetta la scadenza.</p>
<p>Spegnere “Rate limit attivo” non toglie una sospensione già in corso. Prima di un&#8217;importazione grande alza il limite N o disattiva il paletto.</p>
<h3>Un visitatore vede “Troppi invii”</h3>
<p>Un ospite ha inviato troppi commenti o moduli in poco tempo: di default più di 2 in 60 secondi, e il blocco dura 3600 secondi. Il blocco è per IP, quindi può colpire più persone nello stesso ufficio. Alza il valore N della sezione visitatori. Non esiste un elenco di eccezioni.</p>
<h3>Non riesco a creare un utente editor o amministratore</h3>
<p>È voluto. La policy predefinita di <strong>Registrazione utenti</strong> è “Solo ruoli a basso privilegio” e non fa eccezioni, nemmeno per te. Passa temporaneamente a “Nessuna restrizione”, crea l&#8217;utente, poi torna indietro. Con “Nessuna registrazione (esclusiva)” nessuno può creare utenti. Controlla anche il ruolo predefinito in Impostazioni &gt; Generali di WordPress: se è un ruolo vietato, le registrazioni vengono respinte.</p>
<h2>Collegamento al pannello</h2>
<h3>Il collegamento al pannello non risulta</h3>
<p>Lo stato è nel riquadro “Stato collegamento al pannello:” in cima alla scheda <strong>Impostazioni remote</strong>. Se il riquadro manca, i campi erano incompleti: servono Customer code, Chiave API e URL del pannello. Dopo “Salva e verifica collegamento” non compare un banner a parte.</p>
<ul>
<li>“URL del pannello non sicuro: serve https …”: l&#8217;indirizzo deve iniziare con <code>https</code>. Il plugin rifiuta anche di salvare un URL http.</li>
<li>“Autenticazione rifiutata dal pannello: customer_code o chiave API errati.”: ricontrolla i due valori.</li>
<li>“Impossibile raggiungere il pannello: …”: problema di rete, DNS o certificato.</li>
<li>“Risposta del pannello non valida (non è JSON).”: l&#8217;indirizzo non punta al pannello giusto.</li>
</ul>
<p>Se il pannello non risponde, la protezione locale continua e i dati in coda vengono inviati al giro dopo. Il plugin funziona anche senza pannello.</p>
<h3>Le attività non arrivano al pannello</h3>
<p>Nella scheda <strong>Registro attività</strong> guarda la tabella di diagnostica e la riga “in attesa di invio al pannello”. Premi <strong>Prova a inviare adesso</strong>: l&#8217;esito compare nella diagnostica. Il tetto di righe, di default 500, cancella le più vecchie anche se non sono state consegnate.</p>
<h2>Log di debug, integrità e header</h2>
<h3>Il log di debug non si accende</h3>
<p>Hai due messaggi possibili. “la cartella dei caricamenti non è scrivibile”: sistema i permessi di <code>uploads</code>. “i file della sua cartella risultano raggiungibili da internet”: probabile server senza <code>.htaccess</code>, come nginx. Blocca l&#8217;accesso alla cartella <code>csdn-debug-*</code> nella configurazione del server e riprova. Se il log si è fermato per il tetto di 200 MB, scarica o elimina i file e riaccendilo.</p>
<h3>L&#8217;integrità segna “i file del plugin non corrispondono”</h3>
<p>Se hai modificato a mano un file del plugin, è normale. Altrimenti tratta il sito come potenzialmente compromesso: reinstalla il plugin da una copia attendibile e controlla il resto. Se il messaggio dice che non c&#8217;è alcun riferimento, riattiva il plugin per scattare una nuova fotografia.</p>
<h3>HSTS non si attiva, o non si spegne</h3>
<p>Per attivarlo devi aprire le impostazioni del plugin in https, altrimenti compare “HSTS NON è stato attivato”. Salva sempre da una pagina https. Spegnere la casella ferma l&#8217;invio dell&#8217;header, ma i browser che l&#8217;hanno già ricevuto lo ricordano a lungo.</p>
<h2>Se non trovi la risposta</h2>
<p>Se la risoluzione problemi non basta, accendi il log di debug, riproduci il problema e leggi la voce. Poi apri una discussione sul <a href="https://wordpress.org/support/plugin/cisilino-site-defense-network/" target="_blank" rel="noopener">forum di supporto del plugin</a>: è il posto dove ricevere aiuto e vedere i problemi già segnalati. Non incollare percorsi del server o dati sensibili.</p>
<p>Capitolo precedente: <a href="https://www.cisilino.com/?p=985">Log di debug: gli errori PHP in un file proprio</a>. Capitolo successivo: <a href="https://www.cisilino.com/?p=987">Disattivazione, disinstallazione e dati personali</a>. Per l&#8217;indice: <a href="https://www.cisilino.com/?p=972">manuale CSDN</a>.</p><p>The post <a href="https://www.cisilino.com/2026/10/30/manuale-csdn-risoluzione-problemi/">Risoluzione dei problemi e domande frequenti</a> first appeared on <a href="https://www.cisilino.com">Matteo Cisilino</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.cisilino.com/2026/10/30/manuale-csdn-risoluzione-problemi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Log di debug: gli errori PHP in un file proprio</title>
		<link>https://www.cisilino.com/2026/10/30/manuale-csdn-log-di-debug/</link>
					<comments>https://www.cisilino.com/2026/10/30/manuale-csdn-log-di-debug/#respond</comments>
		
		<dc:creator><![CDATA[matteocisilino]]></dc:creator>
		<pubDate>Fri, 30 Oct 2026 16:05:59 +0000</pubDate>
				<category><![CDATA[Manuale CSDN]]></category>
		<category><![CDATA[Cisilino Site Defense Network]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[errori PHP]]></category>
		<category><![CDATA[manuale CSDN]]></category>
		<guid isPermaLink="false">https://www.cisilino.com/?p=985</guid>

					<description><![CDATA[<p>Come accendere il Log di debug del plugin CSDN dalla versione 1.0.15: durata, dimensione dei file, rotazione, download e limiti.</p>
<p>The post <a href="https://www.cisilino.com/2026/10/30/manuale-csdn-log-di-debug/">Log di debug: gli errori PHP in un file proprio</a> first appeared on <a href="https://www.cisilino.com">Matteo Cisilino</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Il log di debug WordPress è una novità del plugin CSDN dalla versione 1.0.15. Registra gli errori PHP del sito in un file proprio, senza toccare <code>wp-config.php</code>. Lo accendi dal backend e si spegne da solo.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" src="https://www.cisilino.com/wp-content/uploads/2026/10/manuale-csdn-log-di-debug.webp" alt="Schema di WordPress con la scheda Log di debug WordPress del plugin CSDN evidenziata" width="1200" height="630"/></figure>
<h2>Dove si trova</h2>
<p>Vai su Impostazioni &gt; Cisilino Site Defense Network (punto 1 dell&#8217;immagine) e apri la scheda <strong>Log di debug</strong> (punto 2). Le sezioni sono tre:</p>
<ul>
<li>punto 3: “Log di debug del sito”, con stato e accensione.</li>
<li>punto 4: “File raccolti”.</li>
<li>punto 5: “Ultime voci”.</li>
</ul>
<h2>A cosa serve il log di debug WordPress</h2>
<p>Ti torna utile quando il sito mostra una pagina bianca o un errore critico, quando qualcosa si rompe dopo un aggiornamento, o quando il tuo hosting non ti lascia modificare <code>wp-config.php</code> né leggere i log. Le costanti <code>WP_DEBUG</code> e <code>WP_DEBUG_LOG</code> si definiscono prima del caricamento dei plugin, quindi un plugin non può accenderle. Questo log usa un gestore di errori PHP agganciato al caricamento del plugin.</p>
<p>Questo log si aggiunge, non sostituisce niente. Gli errori continuano ad arrivare anche dove arrivavano prima, cioè in <code>debug.log</code> e nel log del server. Non invia nulla al pannello.</p>
<h2>Come si usa</h2>
<ol>
<li>Apri la scheda <strong>Log di debug</strong>.</li>
<li>Scegli <strong>Resta acceso per</strong>: <strong>1 ora</strong>, <strong>24 ore</strong> (predefinito) o <strong>7 giorni</strong>.</li>
<li>Scegli <strong>Dimensione massima per file</strong>.</li>
<li>Premi <strong>Accendi il log di debug</strong>. Leggi “Log di debug acceso. Si spegne da solo allo scadere del tempo scelto; i file restano.”.</li>
<li>Riproduci il problema sul sito.</li>
<li>Torna alla scheda. Leggi “Ultime voci” oppure scarica il file dalla sezione “File raccolti”.</li>
<li>Quando hai finito premi <strong>Spegni il log di debug</strong>, oppure aspetta la scadenza. Vedrai “Log di debug spento. I file raccolti sono ancora qui sotto.”.</li>
</ol>
<p>Lo “Stato:” ti dice se il log è “acceso, si spegne il gg/mm/aaaa hh:mm”, “spento (scaduto il …)” oppure “spento”. A log acceso puoi cambiare la dimensione con <strong>Salva dimensione</strong>.</p>
<h3>File raccolti</h3>
<p>La tabella elenca nome, dimensione e i pulsanti <strong>Scarica</strong> ed <strong>Elimina</strong>. Sotto trovi <strong>Elimina tutti i file</strong>. Prima di cancellare il plugin chiede conferma: “Eliminare questo file? L&#8217;operazione non si può annullare.”. Per <strong>Elimina tutti i file</strong> il testo è “Eliminare tutti i file del log di debug? L&#8217;operazione non si può annullare.”. Se non c&#8217;è nulla leggi “Nessun file: il log non è mai stato acceso o non ha ancora registrato nulla.”.</p>
<h3>Ultime voci</h3>
<p>Il riquadro mostra le 200 voci più recenti, dalla più nuova. Il menu <strong>Tutti i livelli</strong> ti permette di filtrare per Fatal error, Parse error, Recoverable error, Warning, Notice o Deprecated. Poi premi <strong>Filtra</strong>. Per tutto il resto scarica i file. Se il filtro non trova nulla leggi “Nessuna voce con questo filtro.”.</p>
<p>Una voce ha questa forma:</p>
<p><code>[2026-10-29 10:15:03 UTC] Warning: messaggio in /percorso/file.php:12 | GET /pagina</code></p>
<ul>
<li>L&#8217;orario è in UTC, diverso dall&#8217;ora del sito che vedi nel <a href="https://www.cisilino.com/?p=984">Registro attività</a>.</li>
<li>Dopo la barra verticale trovi metodo e percorso della richiesta, senza query string. Da riga di comando o cron vedi “cli/cron”.</li>
<li>Un messaggio su più righe, come uno stack trace, resta una sola voce con le righe successive rientrate.</li>
<li>Le righe “Info: log di debug attivato (utente N)” e “Info: log di debug disattivato (utente N)” non hanno un livello: con un filtro non compaiono.</li>
</ul>
<h2>Valori predefiniti e limiti</h2>
<ul>
<li>Durata del log di debug WordPress: 1 ora, 24 ore o 7 giorni. Un altro valore diventa 24 ore.</li>
<li>Dimensione per file: 1, 5, 10, 25 o 50 MB. Il predefinito è 5 MB. La dimensione scelta si salva quando premi <strong>Accendi il log di debug</strong> o <strong>Salva dimensione</strong>. Attenzione: <strong>Spegni il log di debug</strong> riporta la dimensione a 5 MB, perché quel modulo non contiene il menu della dimensione.</li>
<li>Tetto complessivo: 200 MB, sommando file <code>.log</code> e <code>.zip</code>.</li>
<li>Ogni messaggio è troncato a 4000 caratteri.</li>
<li>Registra solo errori PHP: non query lente, errori JavaScript o richieste HTTP.</li>
</ul>
<h2>Esempi</h2>
<ul>
<li>Errore critico dopo l&#8217;aggiornamento di un plugin: accendi per 1 ora, ricarica la pagina, filtra “Fatal error”. La voce indica file e riga, per esempio <code>/…/plugins/xyz/file.php:210 | GET /negozio/</code>.</li>
<li>Avvisi sporadici: 24 ore, filtro Warning o Deprecated. Se il file è stato ruotato, scarica lo zip.</li>
<li>Sito lento senza una causa chiara: 7 giorni con file da 25 MB, poi cerca Notice e Warning che si ripetono.</li>
</ul>
<p>Tieni acceso il minimo necessario: spesso basta 1 ora.</p>
<p><strong>Attenzione:</strong> i file del log di debug contengono percorsi del server e frammenti di dati. Non condividerli in pubblico. Restano sul disco anche dopo lo spegnimento e dopo la disinstallazione del plugin, che cancella le opzioni ma non i file. Eliminali tu quando hai finito. Il tetto complessivo è di 200 MB.</p>
<p><strong>Attenzione:</strong> su server nginx l&#8217;accensione può essere rifiutata finché il server non blocca la cartella <code>csdn-debug-*</code>. Il messaggio è “Log di debug non acceso: i file della sua cartella risultano raggiungibili da internet (probabile server senza supporto a .htaccess, come nginx). I log possono contenere percorsi e dati: blocca l&#8217;accesso alla cartella csdn-debug-* nella configurazione del server e riprova.”. Se non gestisci il server, chiedi a chi lo gestisce.</p>
<p><strong>Attenzione:</strong> il log non vede gli errori soppressi con <code>@</code> né quelli generati prima del caricamento del plugin. Per esempio non vede gli errori di <code>wp-config.php</code>. Il log di debug WordPress del plugin non sostituisce i log del server.</p>
<h2>Cosa succede dietro le quinte</h2>
<p>Il log di debug WordPress salva i file in una cartella <code>wp-content/uploads/csdn-debug-</code> seguita da 16 caratteri casuali. Dentro ci sono un <code>index.php</code>, un <code>.htaccess</code> che nega l&#8217;accesso e il file in uso <code>csdn-debug.log</code>. All&#8217;accensione il plugin scrive un file di prova e prova a leggerlo via HTTP. Se risponde, rifiuta di accendere il log.</p>
<p>Quando il file in uso supera la dimensione scelta viene chiuso, compresso in <code>.zip</code> e ne parte uno nuovo. Nessuna voce va persa. Il <code>.log</code> originale si cancella solo dopo aver verificato lo zip. Se la compressione non riesce, il <code>.log</code> resta. Le voci di “Ultime voci” vengono lette solo dal file in uso, quindi dopo una rotazione quelle vecchie sono negli zip.</p>
<p>Prima di ruotare il plugin controlla il tetto di 200 MB. Se è raggiunto, il log si ferma per non sovrascrivere nulla. Compare l&#8217;avviso giallo: “Il log si è fermato perché i file hanno raggiunto il tetto di spazio (200 MB): per non sovrascrivere i dati non scrive più. Scarica o elimina i file, poi riaccendilo.”. Per ripartire elimina i file e riaccendi.</p>
<p>Alla scadenza il log si spegne da solo, ma i file restano. Il plugin non li tronca e non li cancella mai: lo fai solo tu con <strong>Elimina</strong> o <strong>Elimina tutti i file</strong>. Per gli errori fatali la voce viene scritta a fine richiesta.</p>
<h2>Se il log di debug WordPress non funziona</h2>
<ul>
<li>“Log di debug non acceso: la cartella dei caricamenti non è scrivibile.”: controlla i permessi della cartella <code>wp-content/uploads</code>.</li>
<li>Il log non scrive: se la scrittura fallisce, il plugin lo segnala con una voce “Log di debug del sito: …” negli “Ultimi tentativi” della scheda <a href="https://www.cisilino.com/?p=984">Registro attività</a>.</li>
<li>Il log è fermo per il tetto: scarica ciò che ti serve, elimina i file e riaccendi.</li>
</ul>
<p>La <a href="https://www.cisilino.com/?p=972">guida generale al manuale</a> spiega dove si colloca questa scheda. Per capire meglio le costanti di WordPress guarda la <a href="https://developer.wordpress.org/advanced-administration/debug/debug-wordpress/" target="_blank" rel="noopener">guida ufficiale al debug di WordPress</a>: spiega <code>WP_DEBUG</code> e <code>WP_DEBUG_LOG</code>, che questo plugin non può sostituire.</p>
<p>Capitolo precedente: <a href="https://www.cisilino.com/?p=984">Registro attività</a>. Capitolo successivo: <a href="https://www.cisilino.com/?p=986">Risoluzione dei problemi e domande frequenti</a>.</p><p>The post <a href="https://www.cisilino.com/2026/10/30/manuale-csdn-log-di-debug/">Log di debug: gli errori PHP in un file proprio</a> first appeared on <a href="https://www.cisilino.com">Matteo Cisilino</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.cisilino.com/2026/10/30/manuale-csdn-log-di-debug/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
