Cisilino Site Defense Network: changelog e storico versioni

Storico delle versioni di Cisilino Site Defense Network, il plugin di sicurezza per WordPress. Difende il login, tiene un registro delle attività e controlla l’integrità dei file. Offre anche irrigidimenti opzionali. Qui trovi, per ogni release, cosa è cambiato. La versione attuale è la 1.0.15.

Versione 1.0.15

  • Nuova scheda “Log di debug”. Registra gli errori PHP del sito in un file proprio. L’amministratore la accende e la spegne senza modificare wp-config.php. Si spegne da sola allo scadere del tempo scelto: 1 ora, 24 ore o 7 giorni.
  • Nessuna perdita di dati. Il log si aggiunge a debug.log e al log del server e non li sostituisce. I file non vengono mai cancellati né troncati da soli.
  • Un file che supera la dimensione scelta, da 1 a 50 MB, viene chiuso e compresso in .zip. Prima di togliere l’originale, il plugin verifica lo zip. Al tetto di 200 MB il log si ferma e lo segnala.
  • Allo spegnimento i file restano. Si cancellano solo dall’amministrazione, un file alla volta o tutti.
  • I file stanno in una cartella con nome casuale dentro uploads, protetta da .htaccess. Il log non si accende se la cartella risulta raggiungibile da internet. Puoi leggere le ultime 200 voci con un filtro per livello e scaricare i file.
  • Sicurezza: il blocco dell’enumerazione utenti (?author=N) non funzionava. Il redirect di WordPress verso /author/<nome>/ partiva prima del controllo. Inoltre valori come 1a o author[]=1 lo aggiravano. Ora il controllo parte per primo e vale per qualunque valore.
  • Sicurezza: il blocco dell’esecuzione PHP in uploads ignorava le estensioni maiuscole, per esempio shell.PHP, che molti hosting eseguono. Non copriva nemmeno WordPress installato in una sottocartella.
  • Sicurezza: su multisite le impostazioni del plugin scrivono l’.htaccess condiviso da tutta la rete. Ora sono riservate al super admin e non a ogni amministratore di sotto-sito.
  • Sicurezza: il motivo di un ban ricevuto dal pannello viene scritto come commento in .htaccess. Non può più contenere caratteri di controllo né terminare con \. In Apache quel carattere prolunga la riga e annullava la regola di blocco successiva.
  • Limiti: il log vede gli errori generati dopo il caricamento del plugin e non quelli soppressi con @. Alla disinstallazione i file raccolti restano in uploads.

Versione 1.0.14

  • Documentazione: il readme ora rimanda alle guide e alla storia delle versioni su cisilino.com. Il comportamento del plugin non cambia.

Versione 1.0.13

  • Rate limiting autori: il limite di default era di 3 contenuti in 5 minuti. Sospendeva anche un amministratore al lavoro, per esempio mentre importava o duplicava più pagine di seguito. Non colpiva solo un account compromesso. Il nuovo default è 150 contenuti in 5 minuti. Regge un uso intenso reale e continua a bloccare chi ne pubblica centinaia in un colpo solo. Chi aveva già personalizzato il valore non viene toccato.

Versione 1.0.12

  • Rate limiting autori: non conta più quello che avviene dentro un’installazione di WordPress o in un ambiente temporaneo con prefisso tabelle diverso. Caso reale: il Plugin Check crea un’installazione di prova con articolo, pagina di esempio e informativa privacy. Sospendeva l’amministratore che lo stava usando. Non contano più nemmeno le bozze automatiche, le revisioni e gli elementi nel cestino.
  • Avviso in bacheca finché una sospensione è attiva. L’utente sospeso vede il motivo e la data di fine. Gli amministratori vedono l’elenco degli utenti sospesi, con il collegamento per revocare.
  • La scheda “Rate limiting” spiega in concreto cosa viene contato e cosa no. Spiega anche cosa significa essere sospesi e come uscirne.

Versione 1.0.11

  • Nuova scheda “Rate limiting” con tre paletti, attivabili e disattivabili separatamente. Autori: un utente che crea o pubblica più di N post/pagine nella finestra T viene sospeso per S secondi. L’amministratore principale riceve una mail con i contenuti recenti da controllare. Visitatori (ospiti): più di N commenti o form di contatto nella finestra T bloccano l’IP per S secondi. Il blocco vale solo per quel tipo di invio. Il conteggio è in una tabella dedicata e funziona anche con i commenti disattivati. Email obbligatoria (nella scheda Registrazione utenti): nessun utente può essere creato senza un indirizzo email valido, da qualunque via di creazione. Ogni paletto ha due interruttori: rate limit attivo sì/no e alert via email sì/no. L’alert autori è attivo di default, quello visitatori è disattivato. Tutti i valori N, T e S sono configurabili. Le sospensioni attive sono elencate nella scheda, con la possibilità di revocarle.

Versione 1.0.10

  • Corretto un altro ERROR bloccante del Plugin Check (WordPress.Security.EscapeOutput.OutputNotEscaped), sopravvissuto al fix precedente. Il phpcs:ignore sull’echo multi-riga in print_idle_script() copriva solo la propria riga. Non copriva quelle successive con admin_url()/wp_create_nonce()/wp_login_url(). La chiamata ora è assegnata a una variabile prima dell’unica riga di echo, che porta l’ignore per intero.

Versione 1.0.9

  • Corretto un ERROR bloccante del Plugin Check ufficiale (PluginCheck.CodeAnalysis.Heredoc.NotAllowed). Lo script inline dell’autologout admin usava la sintassi heredoc, non ammessa dalle linee guida di wordpress.org. Ora è una stringa PHP normale, senza cambiamenti di comportamento.

Versione 1.0.8

  • Corretto un fatal error (Uncaught Error: Call to undefined function get_home_path()) che poteva verificarsi durante un tentativo di login fallito. Csdn_Htaccess::htaccess_path() caricava per errore wp-admin/includes/misc.php invece di wp-admin/includes/file.php, il file che definisce davvero get_home_path(). In un contesto admin il fatal restava invisibile, perché la funzione era già disponibile per altra via. Su wp-login.php, invece, poteva bloccare l’accesso al sito con un errore fatale. Il plugin doveva solo registrare il tentativo.

Versione 1.0.7

  • Sicurezza: corretta una race condition nel rilevamento bruteforce (Csdn_Detector::on_login_failed). Permetteva di aggirare la soglia locale di blocco inviando in parallelo tentativi di login falliti per lo stesso IP. Il contatore ora è un upsert atomico (INSERT … ON DUPLICATE KEY UPDATE), non più una lettura e una scrittura separate.

Versione 1.0.6

  • Nuova tab “Paranoic Hardening”: header di sicurezza HTTP opzionali (X-Content-Type-Options, X-Frame-Options, Referrer-Policy, HSTS). Sono tutti disattivati di default e applicati via WordPress (send_headers), non via .htaccess. Funzionano quindi anche senza mod_headers.
  • HSTS è protetto da una guardia esplicita. L’attivazione viene rifiutata se la richiesta di salvataggio non arriva in https. Così si evita di inviare un header che renderebbe il sito irraggiungibile a chi lo riceve, se il sito smettesse di essere sempre https.
  • Ogni opzione ha una spiegazione inline sotto il relativo controllo. Dice cosa fa, quando è sicura e cosa può rompere.
  • Nuovo self-test “Verifica header di sicurezza”: una richiesta reale alla home page per controllare quali header arrivano davvero nella risposta. È utile quando una CDN o un reverse proxy a monte li rimuove in transito.
  • Paranoic Hardening: nuovo autologout degli amministratori per inattività, disattivato di default. Il timeout è configurabile in secondi (60-86400). È misurato lato browser (mouse, tastiera, scroll, condiviso tra più schede), non lato server. Così le richieste automatiche di WP Heartbeat non vengono scambiate per attività reale. Allo scadere del timeout la sessione viene chiusa davvero con wp_logout(), non con un semplice redirect visivo.

Versione 1.0.5

  • Riorganizzazione pannello: nuove tab dedicate “IP bloccati” (con filtro JavaScript lato client), “Hardening / IDS” e “Test” (verifica blocco upload PHP + integrità file). Sono separate dalla tab Generale.

Versione 1.0.4

  • Blocco esecuzione PHP in uploads: coperte anche le estensioni .phar/.phps/.pht. Prima erano coperte solo .php/.phpN/.phtml.
  • Rimossa la direttiva php_admin_flag dalla regola di blocco. Su hosting PHP-FPM/CGI Apache la rifiuta con un errore 500 sull’intero sito. Require all denied da solo è già sufficiente.
  • Aggiunto un self-test dal pannello per verificare che il blocco funzioni davvero sul sito. Non ci si fida più della sola configurazione salvata.

Versione 1.0.3

  • Sicurezza: corretta una convalida insufficiente degli indirizzi IP ricevuti dal pannello. Una risposta manomessa poteva inserire direttive arbitrarie nell’.htaccess del sito. Ora sono accettati solo indirizzi IP e CIDR completi, sia in ricezione sia come ultimo controllo prima di scrivere il file. Nessuna fonte di IP può più saltarlo, compresi gli override locali.
  • Sicurezza: il collegamento al pannello richiede ora https. La richiesta di sincronizzazione trasporta la chiave API. Su http era leggibile da chiunque si trovasse sul percorso di rete. Resta ammesso http solo verso host di sviluppo locale.
  • Sicurezza: la sorveglianza dei caricamenti riconosce ora .user.ini, che su PHP-FPM equivale a un .htaccess. Riconosce anche i file SVG e i nomi costruiti con byte nulli o spazi in coda per mascherare un’estensione eseguibile.
  • Nuovo tetto di righe del registro attività, predefinito 500 e configurabile in Impostazioni > Registro attività. Limita lo spazio su disco occupato dal registro. Il registro cresce anche per effetto di richieste non autenticate (login falliti, commenti, invii di file). Alzando il tetto, la pagina avvisa del maggiore consumo.
  • Corretto un difetto per cui la retention non cancellava mai nulla, con il registro attività acceso ma nessun pannello configurato. Le righe restavano in attesa di una consegna verso un destinatario inesistente. La tabella cresceva senza limiti.
  • I percorsi personalizzati delle regole di hardening vengono ora ripuliti prima di essere scritti. Virgolette e caratteri di controllo non entrano mai nell’.htaccess, che altrimenti poteva risultare non valido. Prima la personalizzazione non era filtrata a sufficienza. Un percorso scritto male poteva rendere il sito irraggiungibile. Si è scelto di scartare quei caratteri in silenzio al momento di scrivere la regola, per tenere l’utente al riparo da errori. Nel campo restano come digitati, ma non hanno effetto.

Versione 1.0.2

  • Nuova sezione “Registrazione utenti” (Impostazioni): tre policy per limitare la creazione di nuovi utenti WordPress. Le policy sono: nessuna restrizione, solo ruoli a basso privilegio, oppure registrazione esclusa del tutto. Con i ruoli a basso privilegio non si creano mai administrator, editor, author o shop_manager. Vale sempre, anche in caso di errore di configurazione. È ATTIVA DI DEFAULT su “solo ruoli a basso privilegio”: i ruoli ad alto privilegio sono già bloccati appena installato, senza bisogno di configurazione. La policy copre wp-admin, REST API, XML-RPC, WP-CLI e chiamate dirette da plugin/temi terzi. Usa il filtro centrale di WordPress, che passa da ogni via di creazione utente. In più c’è una rete di sicurezza: revoca subito i permessi a un account creato mentre la policy era attiva, qualunque sia stata la via d’ingresso.

Versione 1.0.1

  • Ripulitura del readme: il changelog riporta solo le versioni pubblicate sul repository ufficiale.

Versione 1.0.0

  • Prima versione pubblica.
  • Difesa dei login: rilevamento dei tentativi falliti, blocco locale degli IP molesti in .htaccess, whitelist e sblocco manuale dalle impostazioni.
  • Rete Cisilino: scambio facoltativo di un digest di IP ostili con il pannello e con gli altri siti della rete. È disattivato finché non si configura il collegamento.
  • Registro attività: gli eventi rilevanti del sito sono registrati localmente con una retention configurabile. Sono accessi, utenti, contenuti, plugin, temi, core, opzioni, media e caricamenti. Vengono inviati al pannello subito dopo l’evento, senza rallentare la pagina servita.
  • Verifica di integrità: il plugin confronta gli hash MD5 dei propri file con il manifesto distribuito nella release. Segnala file modificati, mancanti o non previsti nella propria cartella.
  • Sorveglianza dei caricamenti: registra i file che entrano nel sito anche fuori dalla libreria media. Riconosce le estensioni eseguibili, comprese le doppie estensioni tipo immagine.php.jpg, e può rifiutarle.
  • Irrigidimenti facoltativi, tutti disattivati per impostazione predefinita.

Le versioni precedenti alla 1.0.0 non sono mai state distribuite pubblicamente. Per le funzioni nel dettaglio, parti dall’articolo di presentazione del plugin.

Avviso sui cookie di WordPress da parte di Real Cookie Banner