You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter应用基于flutter_quill实现富文本的存储与安全最佳实践

富文本存储与XSS防护最佳实践(基于Flutter Quill + Node.js)

我开发了一款Flutter应用,需要为用户添加富文本编辑/发布功能,选用了flutter_quill库——它基于Delta文档实现,能轻松与JSON格式互转,易用性表现良好。

尽管Flutter是移动开发框架,但flutter_quill采用HTML、CSS等Web技术渲染富文本,因此同样存在XSS攻击风险。若允许用户输入任意HTML或JavaScript代码,必须在客户端和服务端同时进行输入清理操作,但我不确定仅依赖库的内置清理功能是否足够,特此请教富文本存储格式与安全防护的最佳实践。

技术栈

  • 客户端:Flutter(Dart)+ Quill
  • 服务端:Node.js + SQL数据库

方案一:存储Delta JSON格式

存储方式

直接将Quill生成的Delta内容以JSON格式存储在SQL数据库中。

安全措施

  • 服务端在存储前对JSON内容进行清理
  • 客户端将内容加载到Quill编辑器前再次执行清理

相关疑问与结论

问:以JSON格式存储是否可行?
答:如果计划长期使用Quill编辑器,JSON是合适的选择——格式灵活,可按需转换为其他格式,但必须在存储和客户端使用前完成数据清理,可借助DOMPurify、SafeValue这类工具实现。

问:推荐的JSON清理方式是什么?
答:JSON结构复杂,清理难度较高,可使用上述提及的工具库,或自行编写清理函数,核心逻辑是移除可被用于执行恶意代码的危险标签与属性。

问:XSS攻击中常用的危险标签与属性有哪些?
答:
危险标签:

<script>
<iframe>
<img>
<object>
<embed>
<video>
<audio>
<svg>

危险属性:

onload
onerror
onmouseover
onclick
onfocus
onblur
style
href
src
background
data
/>

问:服务端清理内容时,能否先转为HTML、清理后对比前后HTML,仅当无差异时才保存JSON?
答:这种方式能确保清理过程未篡改有效数据,但会增加系统开销,需要权衡收益与额外处理时间。


方案二:存储HTML格式

存储方式

客户端先将Delta转换为HTML,清理后发送至服务端;服务端再次执行清理后,将HTML存储到数据库。客户端获取帖子内容后,需先清理再渲染。

安全措施

  • 存储前后端均需执行HTML清理
  • 客户端渲染内容前再次进行清理

相关结论

如果需要频繁以HTML格式展示内容,这种存储方式较为合适——HTML兼容性好,多数设备无需额外处理即可直接展示。但缺点明显:Quill编辑器无法直接使用HTML内容,需要将HTML转回Delta格式,这个过程复杂且耗时,甚至可能丢失部分格式。如果需要支持频繁编辑操作,可能需要同时存储HTML与Delta格式,会增加系统复杂度。


请求建议

希望得到针对上述两个方案的评估意见,或者更具实用性与安全性的替代方案。

内容的提问来源于stack exchange,提问作者Ahmad Shabeeb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 19:43:37