为什么我的字体&当我通过Safecracker发布时,从Wygwam剥离的颜色?

时间:2012-11-06 22:39:45

标签: expressionengine safecracker

我遇到了Wygwam和Safecracker的问题。当我为一个字段扩展Wygwam配置(例如添加font-color)然后在Safecracker中的我的字段上使用该选项时,HTML似乎被剥离了如下:

而不是:

<p>
<span style="color:#ff0000;"><span style="font-size:16px;"><span style="font-family:georgia,serif;">Why aren&#39;t you saving???</span></span></span></p>

我得到这个(提交后):

<p>
<span><span>&lt;span new,courier,monospace;&quot;=&quot;&quot;&gt;Why aren&#39;t you saving???</span></span></p>

我确信这是由于Safecracker中的XSS过滤,有没有什么好的解决方案可以解决这个问题?我正在使用2.6.3的Wygwam和EE 2.5.3(Safecracker 2.1)。

3 个答案:

答案 0 :(得分:6)

阿德里安所说的一切都是对的。但是,如果您不允许访客通过此表单发布,并且仅适用于已批准的注册用户,则可以减轻XSS威胁。实际上,当您在CP中提交条目时,字段不会传递给XSS过滤器。

答案 1 :(得分:3)

看看system/expressionengine/modules/safecracker/libraries/safecracker_lib.php的第1281行,你会看到:

//@TODO what to do about xss_clean and "naughty" html
//for now you can crack open this file and manually add fields_ids and/or field types to the respective arrays
//to prevent xss_clean
//i had some people complain about not being able to submit <object>'s
$xss_clean = ( ! in_array($field['field_id'], $this->skip_xss_field_ids) && ! in_array($field['field_type'], $this->skip_xss_fieldtypes));

此数组似乎专门用于帮助您解决问题(希望跳过对safecracker字段的XSS过滤)。

阵列在同一文件的第2612行附近初始化:

$this->skip_xss_field_ids = array();

因此,您应该只需将字段ID添加到此数组中,即可跳过XSS过滤,如下所示:

$this->skip_xss_field_ids = array(37, 81);

请记住,这是一个非常糟糕的想法。此时,用户现在可以向他们的wygwam字段添加任意javascript,并且您已经有效地将您的网站打开到XSS attacks(恶意用户可以劫持其他用户的会话并做他们喜欢的任何事情)。

答案 2 :(得分:1)

如果你有&#34; removeFormatAttributes&#34;应用于Wygwam配置的设置将删除样式属性(等等)。

转到附加组件 - &gt;模块 - &gt; Wygwam并单击您用于相关字段的配置集。从那里,您可以选择各种设置来影响该集合的工作方式。