Perché Wordpress non filtra post_title?

1

Oggi, quando ho fatto alcuni test e ho scoperto che Wordpress non filtra il post_title.

Rispettivamente, creo post con i titoli:

  1. <?php while ( have_posts() ) : the_post(); echo 'Post Title'; endwhile;?>
  2. <a href="http://stackexchange.com/">Post Title</a>
  3. <script type="text/javascript">alert('Post Title');</script>

I. Con il primo post, Wordpress inserisce l'intero titolo nel tag di commento html: %codice%. Quindi non viene visualizzato alcun titolo per questo post.

II. Il secondo, Wordpress restituisce un titolo collegato al link .

III. La cosa peggiore è la terza. Una finestra pop-up con il messaggio "Post Title" appare tre volte. È strano! Che cosa sta eseguendo Wordpress?

Ho fatto questo test con Wordpress 4.2.2 sul tema Twentyfiteen. Non ne so molto sulla sicurezza.

Questo bug può essere sfruttato e come posso filtrarlo?

    
posta Leo Dang 18.05.2015 - 12:58
fonte

2 risposte

2

Alcune informazioni generali:
Anche se inizialmente potrebbe sembrare un bug, questo non è considerato uno.

Ci sono alcuni ruoli in un sito WordPress (come amministratori e redattori) che hanno la possibilità di pubblicare HTML non filtrato sul sito web. Questo include il titolo del post che è quello che hai usato qui. Questo non è considerato un bug dal momento che si può presumere che la persona che ha i privilegi di amministratore per il sito specifico possa aggiungere o rimuovere qualsiasi contenuto che desidera comunque. Vedi questo link per ulteriori informazioni ufficiali: link

Puoi pensarci in un modo che mettere il tuo script sopra menzionato sul tuo sito personale non sarebbe considerato un bug.

Per rispondere alle tue domande:
Wordpress metterà l'html non filtrato nel punto in cui il titolo della pagina verrebbe incluso. Questo sarà un link se scegli il tuo secondo input, un blocco di script JavaScript (che verrà poi eseguito dal tuo browser) se hai scelto il terzo o praticamente qualsiasi input tu gli dai.

WordPress tuttavia non interpreterà il codice php se è pubblicato lì. Includerà solo l'input come stringa e modificherà i tag per assomigliare ai commenti HTML.

Tuttavia, se tutto ciò ti sembra strano e non vuoi che gli amministratori e gli editor siano in grado di pubblicare HTML non filtrato sul tuo sito, potresti voler aggiungere:

define( 'DISALLOW_UNFILTERED_HTML', true );

nel tuo file wp-config.php (come descritto nel link sopra citato).

    
risposta data 18.05.2015 - 14:18
fonte
1

Il tuo primo esempio è una dimostrazione che wordpress gestisce correttamente il tuo tentativo di "iniezione" PHP: il codice è sfuggito e non eseguito sul server.

Il tuo secondo esempio è piuttosto semplice: si inserisce un collegamento in un titolo, si ottiene un collegamento nel titolo. Non sono sicuro di cosa ti aspettassi ma non viola il vincolo di base: qualcuno - chiunque - che ha il diritto di pubblicare un articolo - creare contenuti - può utilizzare un link. Se questo non è ciò che vuoi, allora forse wordpress non è lo strumento adatto a te.

Il terzo esempio potrebbe essere un po 'più delicato ma non viola le premesse di base del modello di sicurezza di Wordpress: è necessario essere un autore (autenticato e con l'autorizzazione appropriata) per creare un nuovo articolo o modificare un esistente uno. Pertanto, solo chi ha già il diritto di eseguire codice nel contesto degli utenti che visitano può utilizzare il testo dell'articolo per far eseguire JavaScript nel browser.

    
risposta data 18.05.2015 - 14:14
fonte

Leggi altre domande sui tag