在这满天由用户创造内容的时代,各个地方穿插着可以让用户输入的入口。如:写文章,写博客等。但由于用户输入的内容完全是不安全的,所以在存储和展现的时候需要对内容进行过滤,避免用户内容产生XSS和钓鱼等各种危害行为。
对于简单的textarea用户输入,过滤起来比较简单,这里不作多的描述。但对于像支持富文本这样的编辑器创造的内容,过滤就没这么简单了。我们先来看下现在的富文本内容从保存到展现是怎么处理的:
1、产品提供富文本编辑器,支持很多很多的功能。(如:文字排版,插入图片、视频,投票,链接等各种格式)
2、用户利用编辑器输入想要的内容
3、提交时获取编辑器里的HTML片段,将HTML片段提交到后端
4、后端拿到HTML片段后对HTML进行解析(一般都是通过C来实现),配置各种过滤规则,对数据进行过滤。
5、将过滤后的数据保存到数据库。
6、展现时从数据库里进行读取内容。
对于数据过滤部分,由于是通过配置规则来进行的,所以局限于我们已经知道的部分。甚至后端人员对浏览器HTML解析不太了解,导致规则并不全。这样随着漏洞的不断发现,小的漏洞可以在展现的时候及时过滤,但对于大的漏洞可能就要重做数据了,这个成本是非常大。
并且这种解决方案不能从根本上解决问题,只能是等外界发现一个漏洞修复一个漏洞,开发人员完全处于被动的状态。如:百度空间的富文本过滤从2006年到现在不知道修复了多少个漏洞了,过滤规则也升级了N多次。
使用JSON的解决方案
随着前后端数据传输越来越多,JSON数据传输标准因此而生了,并且越来越受到开发人