Quando il nome del tuo plugin non aiuta

Chi segue questo blog magari si ricorderà che nel 2010 creai un plugin per mostrare una porzione del testo di un articolo o di una pagina solo a determinati ruoli di WordPress. Quel plugin, che creai a maggio del 2010 e resi disponibile al download dal sito digwp.com di Jeff Starr, è nei repository di WordPress da novembre del 2012.

Questo plugin si chiama Private Content. Un nome come un altro, ma purtroppo si è rivelato nel tempo eccessivamente semplice da usare per altri sviluppatori di plugin. Quantomeno nel repository di WordPress ce n’è uno che si chiama WP Private Content Plus e, nel repository di CodeCanyon, uno che ha lo stesso identico nome del mio, cioè Private Content, appunto.

Questa cosa ha causato negli anni, compreso oggi, non poche noie, sia a me che agli utenti. Cominciamo dall’ultimo plugin, quello ospitato su CodeCanyon.

Private Content su codecanyon.net

Avendo questo plugin lo stesso identico nome del mio, succede che agli utenti del plugin di CodeCanyon — quando io pubblico un aggiornamento — WordPress sovrascrive la directory del plugin installato con quella del mio plugin.

In altre parole, se un utente usa Private Content di CodeCanyon e io pubblico un aggiornamento del mio plugin (che è tutto un altro plugin), WordPress gli installa il mio, con tutti i problemi che potete immaginare.

Il plugin ospitato su CodeCanyon gestisce tutta una serie di funzioni (tra cui, se ho capito bene, autenticazione degli utenti, visibilità di contenuti a pagamento e cose simili), col risultato che, in caso di sovrascrittura del plugin legittimo, l’amministratore si ritrova con un plugin del tutto diverso e una situazione completamente sottosopra: dopo essersene accorto, dovrà ripristinare la situazione subito, altrimenti addio a tutti i permessi che aveva impostato.

Com’è possibile che succeda questo? WordPress (almeno per ora) non ha una gestione dei plugin basata su firma crittografica, hash o tecniche di questo tipo, ma si basa — per aggiornare un plugin — sullo slug del plugin, slug che coincide col nome della directory dove viene ospitato sul suo repository. Quindi, se nel sito dell’utente la directory che contiene il plugin di CodeCanyon si chiama private-content e WordPress si accorge che il plugin Private Content fatto da Aldo (che ha lo stesso slug private-content) è stato aggiornato rispetto a quello installato, WordPress lo “aggiorna”, sostituendo il contenuto della directory.

Ho perso il conto di quanti utenti mi hanno segnalato questa cosa, ma non posso farci niente. Avrei dovuto, semmai, scegliere un nome più complicato, ma non era semplice immaginarsi una cosa di questo tipo.

WP Private Content Pro su wordpress.org

La storia con questo plugin è invece recentissima. Non mi era mai capitato di imbattermi in problemi con lui.

Oggi, di prima mattina, insieme col caffè mi arriva la segnalazione che un utente ha lasciato una recensione a una stella su questo plugin. Apro la recensione e leggo:

Easily infected! Addirittura! 😀 Ho notato subito, però, quel wppcp_options che il mio plugin non crea assolutamente nel database. Immediatamente ho capito che si trattava di un’altro scambio di plugin: l’autore della recensione, mi sono detto, ha sbagliato posto.

Cerco subito quale plugin possa creare quell’option name nella tabella delle opzioni di WordPress. Non mi ci è voluto molto a trovare il plugin WP Private Content Plus (notate il prefisso del nome delle opzioni wppcp_ che combacia con questo nome). Ho anche notato che nelle recensioni di questo plugin diversi utenti hanno segnalato (scorrettamente, perché non si fa così) problemi di sicurezza di questo plugin, ormai risolti a detta del suo autore.

Ho fatto presente all’autore della recensione l’errore:

Ho atteso quasi tutto il giorno. Nel tardo pomeriggio ho aggiunto un altro commento alla recensione, ma questa volta rivolgendomi ai moderatori e aggiungendo alla recensione il tag modlook, fondamentale per far intervenire i moderatori:

Pochi minuti dopo, un moderatore è intervenuto e, dopo aver lasciato un commento, ha cancellato la recensione. Ecco cosa ha scritto:

@xxxyyyzzz

1. It appears you’ve posted this incorrectly so I’m removing it.

2. Reviews are not how you should deal with a potentially vulnerable plugin. Please see https://developer.wordpress.org/plugins/wordpress-org/plugin-security/reporting-plugin-security-issues/ for the proper procedure.

Steve Stern, su wordpress.org

Il punto 1 era palese: il recensore si era sbagliato sulla pagina dove scrivere. Il punto 2 è interessante perché tiene conto della responsible disclosure: detto in breve, se trovi una vulnerabilità, non spiattellarla subito ai quatto venti, ma avvisa in privato chi di competenza e dai un tempo massimo per la risoluzione del problema, al cui scadere renderai pubblica la vulnerabilità.

Poco fa l’autore della recensione si è scusato via email e mi ha anche ringraziato per averlo guidato.


Ecco, tutto questo per dire che — se avessi usato un nome del tutto diverso da Private Content — di certo in questi anni non avrei dovuto perdere tempo dietro a queste storie.

Pubblicato da Aldo

Aldo Latino usa con entusiasmo KDE neon, è un appassionato di WordPress e si diletta a giocare a scacchi. Ha anche una lista dei desideri. Per altre informazioni visita la sua .

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *