首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ExpressionEngine中使用SafeCracker剥离HTML和CSS内联样式

在ExpressionEngine中使用SafeCracker剥离HTML和CSS内联样式
EN

Stack Overflow用户
提问于 2011-06-24 07:22:37
回答 1查看 803关注 0票数 1

我在ExpressionEngine中有一个用SafeCracker构建的表单。其中一个文本区域字段用于允许用户提交HTML代码。

以下是他们将提供的代码类型的示例:

<div style="left: 385px; top: 137px;" class="aaa"></div>

当提交表单并将条目保存到数据库时,SafeCracker会去掉内联CSS样式。实际保存到数据库的结果是:

<div class="aaa"></div>

正如您所看到的,内联CSS样式正在被移除,但HTML的其余部分保持不变。

我想让用户能够提交超文本标记语言代码,而不是有SafeCracker剥离的内联CSS样式(S)。我如何才能做到这一点呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-24 11:19:18

SafeCracker使用内置的ExpressionEngine XSS Sanitization Method清除用户提交的来自跨站点脚本和Scripting漏洞的输入。

在将任何前端用户输入插入数据库或输出到屏幕之前,都会使用$this->EE->security->xss_clean()对其进行清理。

谢天谢地,EllisLab的工程师们提供了一种秘密的、没有文档记录的方法,可以将EllisLab中使用的字段类型field_ids列入“白名单”,并免除它们的过滤。

要阻止SafeCracker从给定域中剥离所有超文本标记语言,请打开以下文件,具体取决于您运行的ExpressionEngine版本:

EE 2.1.3或更早版本的 (SafeCracker作为第三方附加组件安装) /system/expressionengine/third_party/safecracker/libraries/safecracker_lib.php

EE 2.2.0或更高版本的 (SafeCracker作为第一方模块安装) /system/expressionengine/modules/safecracker/libraries/safecracker_lib.php

注意: ExpressionEngine 2.2.0将SafeCracker捆绑为第一方模块,因此您的安装位置将取决于您正在运行的版本或从哪个版本升级。

向下滚动到行2371 (对于EE 2.1.3)行2516 (对于EE 2.2),并查找以下内容:

代码语言:javascript
复制
$this->skip_xss_fieldtypes = array();
$this->skip_xss_field_ids = array();

这就是有趣的开始。要将应用了XSS过滤器的字段列入“白名单”,只需将字段类型field_id添加到任一数组中。

下面是一个例子:

代码语言:javascript
复制
$this->skip_xss_fieldtypes = array(
    // This is the fieldtype as specified in the Control Panel
    // Channel Fields, not what you use in your SafeCracker template
    'textarea'
);
$this->skip_xss_field_ids = array(
    // This is the field_id from the exp_channel_data MySQL Table
    'field_id_1'
);

您可以指定特定类型的字段类型(文本区域、输入等),如果您希望更明确一些,也可以指定field_id。前一种方式更通用,而后一种方式是绝对的,如果自定义字段需要更改其类型,则更灵活。

有了这些更改,您从XSS清理方法中免除的任何字段都将不再应用任何筛选,并允许将任意HTML提交到数据库中!

请记住,对ExpressionEngine的任何升级都可能会覆盖此文件,因此您可能希望更改该文件的权限或保留备份。

应该非常认真地对待跨站点脚本,因为您永远不会希望您的站点成为攻击载体的来源。总是在谨慎的一面犯错误。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6461763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档