Rails html 编辑器的内容上传后应该做哪些工作?

lufeihaidao · 2013年12月02日 · 最后由 lufeihaidao 回复于 2013年12月02日 · 3396 次阅读

先问下大家用的是哪种富文本编辑器?我选了个 redactor(我觉得 ckeditor 太重)

这些编辑器上传的应该都是 html 内容的字符串。对于日志/博客这种内容,应该允许到什么程度的自定义呢?换句话说,应该禁止出现哪些 html tag?(script tag 是必然要 ban 的)除此之外,经由 redactor 编辑的内容还会包含 style float 等属性,这些我不太确定是否应该去掉。删掉吧,有些东西不太好实现,比如居中,图片在文字左或者右等;不删吧,要是用户给出很复杂的结构也不太好。大家是怎么处理的?

到实现上,在 rails 中是用 sanitize(content) 来清理 html 字符串的,但是如果我只想清除 script 标签的话,配置好麻烦,要把所有我不想删除的标签都写出来,有没有比较简便的方法?

富文本编辑器应该在输入的时候把特殊字符 escape 掉,比如 < 变成 &lt;,这样输出的时候不受 sanitize 影响,安全又可用。

我看 basecamp 是用这个 http://xing.github.io/wysihtml5/

#1 楼 @Rei 这个意思我了解了,对于你给我的这个 demo,还有 redactor 的这个 demo,直接输入小于号 < ,然后再切换到 html 编辑框,能看到这些编辑器都可以在 js 端就 escape 掉。

我的问题是这样的:在这个 redactor 的 demo 里,先切换到 html 代码编辑界面,然后加入一句 <script>alert('hello');</script> ,然后不切换回普通编辑界面直接点击保存,这段代码就会执行。怎样阻止这样的事情?

啰嗦一句,事实上如果你考虑的是全端应用,应该尽量考虑使用 markdown 之类的描述语言,然后各平台根据自己的情况进行 format 和 display.......

#2 楼 @lufeihaidao 当作非正常输入,显示的时候 sanitize 掉。

用户要想提交的话,用脚本都可以提交的。所以要是想插入代码,就用可视模式先 escape,非要用 html 模式的,那么自己把标签 escape。搞破坏的就 sanitize 行了。

#5 楼 @Rei OK。但看 文档,sanitize 只支持白名单,如果我支持的 tag 较多,不支持的只有 script 的话,也只能枚举我支持的 tag 了?

#6 楼 @lufeihaidao 白名单才安全。

#7 楼 @Rei 哈哈这个理由 (不得不) 值得接受

需要 登录 后方可回复, 如果你还没有账号请 注册新账号