How to escape custom css?

时间:2014-07-08 作者:user1981248

我正在创建一个WordPress主题,允许用户从主题选项中添加一些自定义css。然后,此css代码将直接在页面的头部部分得到回应,代码如下:

add_action(\'wp_head\', \'theme_dynamic_css\');
function theme_dynamic_css(){
  global $my_theme_options;
  $custom_css = \'\';
  if (isset($my_theme_options[\'custom-css\'])) {
    $custom_css .= $my_theme_options[\'custom-css\']."\\r\\n";
  }
  echo \'<style id="my-theme-custom-css">\'.$custom_css.\'</style>\';
}
我应该使用esc_html(); 在这里起初,我假设如果代码在样式标记之间,那么应该不会有问题,但现在我很困惑。

请帮忙。

2 个回复
SO网友:Johansson

您可以通过以下方式添加CSS,而不是直接在标题中打印CSS(这不是最佳做法)wp_add_inline_style. 钩入wp_enqueue_scripts 并在主题样式表之后添加CSS。

所以,你的代码是这样的:

add_action(\'wp_enqueue_scripts\', \'theme_dynamic_css\');
function theme_dynamic_css(){
  global $my_theme_options;
  if (isset($my_theme_options[\'custom-css\'])) {
    $custom_css .= $my_theme_options[\'custom-css\']."\\r\\n";
  }
  wp_add_inline_style(\'style\', $custom_css);
}
您应该在已将主题的主样式表排入队列后使用此选项,方法是:

wp_enqueue_style( \'style\', get_stylesheet_uri());
还要注意为样式表选择的ID。

SO网友:Mark Kaplun

你(可能还有99%的主题作者)试图做的是错误的。不应该期望用户知道CSS来定制主题,如果他们确实需要进入这样一个低级别,那么他们应该做的正确的事情是创建一个子主题并将其修改插入到CSS文件中。

以您描述的方式输入CSS是很棘手的,因为CSS不是一般的html,不能以相同的方式转义,但也不可能清理并删除其中潜在的不安全代码。最终的结果是,您必须“按原样”输出用户的CSS,以确保不会破坏它,但在这样一个功能最有用的地方——多站点,它太不安全,无法使用。

结束

相关推荐

WordPress Ajax Data Security

我知道nonce可以检查意图,但如果我可以用它们来限制数据库读取,那就没有任何意义了?我的意思是,我正在使用AJAX从数据库中获取记录,但我不希望任何人通过其他方式获得该数据(向该数据库发布请求admin-ajax.php 第页)。例如,在我的AJAX处理程序中,我有这么多的工作(我正在发送$myid 以及AJAX调用中的操作):$myid = 5575; $query = \"SELECT `id` FROM table WHERE `user_id` = $myid;\"; $data