Impedire a WordPress di rimuovere i tag <script> durante il passaggio da HTML a Visuale (TinyMCE)

2 ott 2012, 16:17:21
Visualizzazioni: 21.5K
Voti: 3

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!

6
Commenti

Stai utilizzando WordPress come installazione singola o in modalità multisito?

Matthew Boynes Matthew Boynes
2 ott 2012 16:25:29

Questo è essenzialmente un'enorme falla di sicurezza che stai cercando di aprire

Tom J Nowell Tom J Nowell
2 ott 2012 16:32:46

Perché vuoi fare questo?

Tom J Nowell Tom J Nowell
2 ott 2012 18:55:26

Ciao, la ragione principale per voler fare questo è perché su alcuni siti che gestisco, inserisco comunemente il codice Google Adsense all'interno del corpo dei post. Il CPC è molto più alto in questo modo, e spesso sperimento con diversi annunci. Le pagine che contengono il codice JS di Adsense sono spesso modificate in modalità Visuale, ed è così fastidioso dover costantemente copiare e incollare nuovamente il codice JS quando viene rimosso. Apprezzo le preoccupazioni di sicurezza, ma se il mio accesso venisse violato ci sarebbero problemi molto più grandi di semplici questioni JS - la natura stessa della violazione sarebbe un problema enorme.

pixelkicks pixelkicks
2 ott 2012 23:06:16

Allora sembra che tu abbia chiesto una soluzione per il tuo "kludge", la domanda corretta da porre sarebbe stata come aggiungere Adsense nel mezzo dei post, a cui la risposta corretta sarebbe stata l'uso di uno shortcode, e ce ne sono molti disponibili, probabilmente uno personalizzato sarebbe stato pubblicato e avresti guadagnato molta reputazione per averlo chiesto e diversi badge per domande degne di nota. Invece hai chiesto come inserire Javascript arbitrario nel contenuto dei post, e la risposta che hai ricevuto è stata che farlo è una cattiva pratica e un significativo buco di sicurezza.

Tom J Nowell Tom J Nowell
3 ott 2012 01:44:35

Woah là, signor Nowell. Quindi non ci è permesso chiedere come estendere Wordpress? Non ci è permesso scavare a fondo e vedere di cosa è capace il sistema? La conoscenza è potere, amico mio, e voglio conoscere i limiti così come le capacità. Posso prendere le mie decisioni di sicurezza molto bene - e come ho detto, attualmente sono l'unica persona con accesso admin al sistema. Se qualcuno riuscisse ad ottenere i miei dati di accesso, cosa li fermerebbe dall'installare plugin come PHP-Exec, o qualcosa di simile, indipendentemente dalla possibilità di aggiungere javascript nel post che secondo me è meno preoccupante

pixelkicks pixelkicks
3 ott 2012 12:24:26
Mostra i restanti 1 commenti
Tutte le risposte alla domanda 5
0

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().

2 set 2016 18:39:02
10

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 );

2 ott 2012 16:35:07
Commenti

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!

Matthew Boynes Matthew Boynes
2 ott 2012 17:47:29

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

Tom J Nowell Tom J Nowell
2 ott 2012 18:54:21

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

Tom J Nowell Tom J Nowell
2 ott 2012 18:55:06

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

Tom J Nowell Tom J Nowell
2 ott 2012 18:56:23

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?

Matthew Boynes Matthew Boynes
2 ott 2012 21:15:12

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)

Tom J Nowell Tom J Nowell
2 ott 2012 21:41:34

Inoltre non sappiamo ancora perché l'OP voglia questo

Tom J Nowell Tom J Nowell
2 ott 2012 21:42:31

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!

Matthew Boynes Matthew Boynes
2 ott 2012 22:32:27

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.

pixelkicks pixelkicks
2 ott 2012 23:08:52

È 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.

Tom J Nowell Tom J Nowell
3 ott 2012 01:48:20
Mostra i restanti 5 commenti
9

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.

9 mar 2017 18:39:24
Commenti

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

Mark Kaplun Mark Kaplun
9 mar 2017 19:43:47

@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.

Guss Guss
9 mar 2017 19:48:09

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.

Guss Guss
9 mar 2017 19:50:51

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.

Mark Kaplun Mark Kaplun
9 mar 2017 20:12:37

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.

Mark Kaplun Mark Kaplun
9 mar 2017 20:14:31

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.

Guss Guss
9 mar 2017 20:17:32

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

Mark Kaplun Mark Kaplun
9 mar 2017 20:18:00

Continuiamo questa discussione nella chat.

Guss Guss
9 mar 2017 20:18:41

Per me unfiltered_html ha risolto il problema. Grazie.

ako ako
16 nov 2020 13:58:47
Mostra i restanti 4 commenti
0

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.

21 feb 2024 12:50:16
0

Esiste anche una soluzione per chi utilizza il plugin Elementor e non desidera installare ulteriori plugin:

  1. Dal menu admin vai a Template > Aggiungi nuovo
  2. Scegli "Contenitore" come tipo di template e assegnagli un nome che ti permetta di riconoscerlo facilmente per eventuali modifiche future.
  3. Nella schermata dell'editor di Elementor, clicca sul segno + per aggiungere un contenitore e inserisci al suo interno un widget HTML.
  4. Incolla il tuo script all'interno della casella HTML. (Nota che deve essere racchiuso tra i tag <script></script>)
  5. Salva ed esci tornando alla lista dei contenitori. (Template > Template salvati > Contenitori)
  6. Individua il template appena creato e copia il suo shortcode dalla casella di fronte.
  7. Incolla questo shortcode in qualsiasi editor di testo e goditi il risultato.
9 gen 2024 13:33:29