json如何传富⽂本为java_html2json:⼀种新的富⽂本数据传
输⽅案
在这满天由⽤户创造内容的时代,各个地⽅穿插着可以让⽤户输⼊的⼊⼝。如:写⽂章,写博客等。但由于⽤户输⼊的内容完全是不安全的,所以在存储和展现的时候需要对内容进⾏过滤,避免⽤户内容产⽣XSS和钓鱼等各种危害⾏为。
对于简单的textarea⽤户输⼊,过滤起来⽐较简单,这⾥不作多的描述。但对于像⽀持富⽂本这样的编辑器创造的内容,过滤就没这么简单了。我们先来看下现在的富⽂本内容从保存到展现是怎么处理的:
1、产品提供富⽂本编辑器,⽀持很多很多的功能。(如:⽂字排版,插⼊图⽚、视频,投票,链接等各种格式)
2、⽤户利⽤编辑器输⼊想要的内容
3、提交时获取编辑器⾥的HTML⽚段,将HTML⽚段提交到后端
4、后端拿到HTML⽚段后对HTML进⾏解析(⼀般都是通过C来实现),配置各种过滤规则,对数据进⾏过滤。
5、将过滤后的数据保存到数据库。
6、展现时从数据库⾥进⾏读取内容。
对于数据过滤部分,由于是通过配置规则来进⾏的,所以局限于我们已经知道的部分。甚⾄后端⼈员对浏览器HTML解析不太了解,导致规则并不全。这样随着漏洞的不断发现,⼩的漏洞可以在展现的时候及时过滤,但对于⼤的漏洞可能就要重做数据了,这个成本是⾮常⼤。
并且这种解决⽅案不能从根本上解决问题,只能是等外界发现⼀个漏洞修复⼀个漏洞,开发⼈员完全处于被动的状态。如:百度空间的富⽂本过滤从2006年到现在不知道修复了多少个漏洞了,过滤规则也升级了N多次。
使⽤JSON的解决⽅案
随着前后端数据传输越来越多,JSON数据传输标准因此⽽⽣了,并且越来越受到开发⼈员的使⽤。那我们可不可以通过JSON来传输富⽂本数据呢?
下⾯是⼀种利⽤JSON进⾏富⽂本数据的⽅案:
1、⽤户利⽤富⽂本编辑器创造内容保存时。
2、不直接将HTML⽚段传递到后端,⽽是将HTML⽚段转化为JSON格式。如:
welefen
转化后的JSON格式为{tag:"div",attr:[], text:"welefen":child:[]}
3、后端收到数据后判断是否是JSON格式(正常传递的肯定是JSON格式,但要对恶意攻击的数据进⾏处理,如果JSON解析失败,则直接使⽤HTML转义),然后将JSON数据转化为后端数据对象(如:PHP使⽤json_decode将JSON数据转化为数组)。
4、对数据对象进⾏过滤,由于数据格式只有tag,attr,text等,并且这3中数据格式我们都是知道的,如:tag值只有字母和数字组成。所以过滤起来⾮常简单。
5、将过滤后的数据对象拼合成HTML⽚段进⾏保存。
6、展现时直接将保存后的HTML⽚段展现就可以了。
这种⽅式⼀个最⼤的好处就是数据安全过滤上异常简单,不⽤使⽤词法分析,容错处理等各种技术。只⽤对单⽚段数据进⾏数据格式过滤即可。并且性能上也不是问题,⼏乎可以使⽤PHP来处理即可,完全不⽤使⽤C来进⾏。
对于后端对JSON进⾏过滤并拼合成HTML⽚段,还没到现成的库,时间⾃⼰来写个。
对于富⽂本数据传输⽅案,你有什么更好的⽅案呢?我们⼀起来探讨
ps: 对于不⽀持JS的终端,存储的时候对内容直接使⽤HTML转码,显⽰的时候直接展⽰就可以了。
@update 2012.03.05
这种也是有些瑕疵的,主要有:
1、把html转为json会增加要传输的⽂本⼤⼩。⼀般会增加20%-50%,但数据量也不是很⼤。
java修改html文件2、⽂本内容很⼤时,浏览器将html转为json需要⼀定的时间。不过不是⼤问题,测试了下IE6下4W个字符只要400ms,chrome下只要⼏⼗毫秒。
所以个⼈觉得即使有些瑕疵,还是⾮常值的去使⽤的。
注:⽂章内容可修改
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论