【发布时间】:2021-07-31 11:07:05
【问题描述】:
我正在用 django 和 wagtail 作为 cms 构建一个网站,我想知道是否可以使用 wagtail 的默认富文本过滤器通过 wagtail 的富文本字段执行 javascript。
例如,为链接添加 onclick 属性。
出于安全原因,我的目标是防止此类事情发生。
【问题讨论】:
标签: django web content-management-system wagtail
我正在用 django 和 wagtail 作为 cms 构建一个网站,我想知道是否可以使用 wagtail 的默认富文本过滤器通过 wagtail 的富文本字段执行 javascript。
例如,为链接添加 onclick 属性。
出于安全原因,我的目标是防止此类事情发生。
【问题讨论】:
标签: django web content-management-system wagtail
|richtext 模板过滤器不会从其输入中去除任何 Javascript 代码(例如 onclick 属性或 <script> 标记) - 它仅对 Wagtail's internal HTML-like format 进行轻度重写,例如替换 <a linktype="page" id="123"> 页面带有真实 URL 的引用。
但是,Javascript 代码在通过 Draftail 富文本编辑器提交时被阻止。这是因为数据以非 HTML 格式(即Draft.JS ContentState JSON)准备和提交,然后在保存到数据库时转换为 Wagtail 的类似 HTML 格式 - 在此过程中,有一个“允许列表”元素转换,并且这些都没有任何用于传递 Javascript 代码的规定。 (如果发现绕过这个机制的方法,那么这将被认为是一个安全问题,并通过Wagtail's security process处理。)
这确实意味着,如果您的项目以一种不通过富文本编辑器(例如从外部源导入内容)的方式将不受信任的富文本数据插入数据库,则您有责任为任何不需要的元素/属性验证该数据。
【讨论】: