我遇到了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't you saving???</span></span></span></p>
我得到这个(提交后):
<p>
<span><span><span new,courier,monospace;"="">Why aren't you saving???</span></span></p>
我确信这是由于Safecracker中的XSS过滤,有没有什么好的解决方案可以解决这个问题?我正在使用2.6.3的Wygwam和EE 2.5.3(Safecracker 2.1)。
答案 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并单击您用于相关字段的配置集。从那里,您可以选择各种设置来影响该集合的工作方式。