Cum să previi escaparea la salvarea codului HTML într-o valoare de opțiune?

13 ian. 2011, 21:05:11
Vizualizări: 21K
Voturi: 10

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'] ); ?

0
Toate răspunsurile la întrebare 3
0
12

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)));
3 feb. 2011 17:12:47
3
stripslashes(wp_filter_post_kses(addslashes($_POST['sidebar_code'])));

dar trebuie să știți că filtrul kses nu este 100% sigur.

13 ian. 2011 21:46:03
Comentarii

ce înseamnă că nu este 100% sigur?

Amit Amit
14 ian. 2011 00:09:12

Î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

onetrickpony onetrickpony
14 ian. 2011 02:29:02

kses elimină toate clasele suplimentare și atributele html (de ex. class="classname" width="100") există vreo metodă de a ocoli asta?

Talon Talon
18 oct. 2012 01:07:09
1

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 />';
  }
?>
19 iul. 2011 10:45:37
Comentarii

Depinde de ce faci. esc_textarea va converti orice HTML în coduri de entități HTML, așa că nu poți să-l folosești cu o zonă de text avansat precum tinyMCE.

Jake Jake
16 iul. 2012 18:00:54