Come evitare l'escape quando si salva codice HTML in un valore di opzione?

13 gen 2011, 21:05:11
Visualizzazioni: 21K
Voti: 10

Ho una pagina Opzioni Tema dove l'utente può aggiungere determinate opzioni come i link di Facebook, ecc. Una delle opzioni è per del codice pubblicitario e quando lo salvo come opzione viene escapato più e più volte.

Qual è il miglior approccio per salvare il codice inserito in una <textarea> della pagina di amministrazione usando update_option( 'sidebar_code', $_POST['sidebar_code'] ); ?

0
Tutte le risposte alla domanda 3
0
12

Ho adottato un approccio diverso per questo. Ho codificato e decodificato le mie opzioni con entità HTML. Una cosa di cui non sono sicuro è se questo apra una brutta backdoor per permettere a malintenzionati di inserire HTML compromettente. Mi affido al fatto che solo gli amministratori modificheranno le opzioni del tema comunque, ma forse sono ingenuo?

Ecco come appare quando salvo un'opzione:

update_option('my_option', htmlentities(stripslashes($_REQUEST['my_option'])));

E questo è come appare quando recupero un'opzione:

html_entity_decode(get_option('my_option',htmlentities($my_default_value)));
3 feb 2011 17:12:47
3
stripslashes(wp_filter_post_kses(addslashes($_POST['sidebar_code'])));

ma dovresti sapere che il filtro kses non è sicuro al 100%.

13 gen 2011 21:46:03
Commenti

cosa intendi con non sicuro al 100%?

Amit Amit
14 gen 2011 00:09:12

Intendo che qualcuno potrebbe comunque fare XSS al tuo sito se è veramente bravo. Se non sbaglio, l'ultima patch di wp ha risolto una vulnerabilità XSS nelle funzioni kses

onetrickpony onetrickpony
14 gen 2011 02:29:02

kses rimuove tutte le classi extra e gli attributi html (es. class="classname" width="100") c'è qualche modo per aggirare questo?

Talon Talon
18 ott 2012 01:07:09
1

Questa non è una risposta completa alla tua domanda, ma potrebbe indicarti la direzione giusta: potresti provare <?php esc_textarea( $text ) ?>, come dettagliato dal codex qui: http://codex.wordpress.org/Function_Reference/esc_textarea.

I miei frammenti di codice per le textarea dei metabox sono così:

<?php 
  if ( $meta_box['type'] == "textarea" ) {
    $meta_box_value = esc_textarea( get_post_meta($post->ID, $meta_box['name'].'_value', true) );
    echo '<textarea class="meta-textarea" style="width: 100%;" cols="20" rows="2" name="' . $meta_box['name'] . '_value">' . $meta_box_value . '</textarea><br />';
  }
?>
19 lug 2011 10:45:37
Commenti

Dipende da ciò che stai facendo. esc_textarea convertirà qualsiasi HTML in codici di entità HTML, quindi non puoi usarlo con un'area di testo avanzato come tinyMCE.

Jake Jake
16 lug 2012 18:00:54