在选项值中保存HTML代码时如何防止转义?


9

我有一个“主题选项”页面,用户可以在其中添加某些选项,例如Facebook链接等。选项之一是用于某些广告代码,将其保存为选项时,它会一遍又一遍地转义。

什么是保存插在管理页面代码的最佳方法<textarea>使用update_option( 'sidebar_code', $_POST['sidebar_code'] );

Answers:


8
stripslashes(wp_filter_post_kses(addslashes($_POST['sidebar_code'])));

但是您应该知道kses过滤器不是100%安全的。


2
您不是100%安全的意思是什么?
阿米特(Amit)

我的意思是,如果某人真的很擅长,仍然可以XSS您的网站。如果我没记错的话,最后一个wp补丁修复了kses函数中的xss漏洞
onetrickpony

kses去除所有额外的class和html属性(例如class =“ classname” width =“ 100”),有什么办法可以解决?
Talon 2012年

11

我采取了另一种方法。我使用HTML实体对选项进行了编码和解码。我不确定的一件事是,这是否会给人们打开讨厌的后门,以驱使破坏HTML的行为通过。我依靠的事实是,无论如何,只有管理员才能编辑主题选项,但是也许我很天真?

这是我保存选项时的样子:

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

这是我检索选项时的样子:

html_entity_decode(get_option('my_option',htmlentities($my_default_value)));

2

这不是您问题的完整答案,但可能会为您指明正确的方向:您可以尝试<?php esc_textarea( $text ) ?>按以下法典中的详细说明进行操作:http : //codex.wordpress.org/Function_Reference/esc_textarea

我自己的metabox textarea片段如下所示:

<?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 />';
  }
?>

取决于您在做什么。esc_textarea会将任何html转换为HTML实体代码,因此您不能将其与诸如tinyMCE之类的富文本区域一起使用。
2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.