Cum să previi escaparea la salvarea codului HTML într-o valoare de opțiune?
Am o pagină de Opțiuni Temă unde utilizatorul poate adăuga anumite opțiuni precum link-uri Facebook etc. Una dintre opțiuni este pentru un cod de reclamă și când îl salvez ca opțiune, acesta este escapat în mod repetat.
Care este cea mai bună abordare pentru salvarea codului inserat într-o pagină de admin <textarea>
folosind update_option( 'sidebar_code', $_POST['sidebar_code'] );
?

Am ales o altă abordare pentru aceasta. Am codificat și decodificat opțiunile mele cu entități HTML. Un lucru de care nu sunt sigur este dacă aceasta deschide o portă din spate pentru ca oamenii să introducă HTML compromițător. Mă bazez pe faptul că doar administratorii vor edita opțiunile temei oricum, dar poate sunt naiv?
Iată cum arată când salvez o opțiune:
update_option('my_option', htmlentities(stripslashes($_REQUEST['my_option'])));
Și așa arată când preiau o opțiune:
html_entity_decode(get_option('my_option',htmlentities($my_default_value)));

Înseamnă că cineva ar putea totuși să facă XSS pe site-ul tău dacă este foarte bun în asta. Dacă nu mă înșel, ultimul patch pentru wp a rezolvat o vulnerabilitate XSS în funcțiile kses

Acesta nu este un răspuns complet la întrebarea ta, dar te poate îndruma în direcția potrivită: Ai putea încerca <?php esc_textarea( $text ) ?>
, așa cum este detaliat în codex aici: http://codex.wordpress.org/Function_Reference/esc_textarea.
Propriile mele fragmente de cod pentru metabox-uri cu textarea arată astfel:
<?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 />';
}
?>
