2011-03-15 142 views
1

我刚刚在我的应用中实现了富文本输入的CKEditor,我在想用户输入任何东西的能力都可能构成安全威胁。使用CKEditor的安全隐患

目前,我有最简单的实现 - CKEditor坐在一个表单中,输入作为update_attributes的一部分保存到数据库,其他人可以将输出视为html_safe

不知何故,上述对我来说听起来并不好,即使它有效。我是否认为上述方法存在风险?有没有更安全的方法来阻止通过编辑器的攻击?

回答

1

您应该始终注意对用户输入进行消毒。就你而言,通过剥离所有不需要的HTML标记(例如,不管它来自哪里)。

html_safe并非为了去除HTML或为您清理。请参阅ActiveSupport::SafeBuffer上的Yehuda Katz' article。它旨在通过将字符串标记为安全(如果是)(并将其编码为HTML实体,以使其安全)来防止“不安全”标记。

ActionView::Helpers::SanitizeHelper有卫生技术助手,您可以用它来清洁显示内容,但您可能需要在进入数据库之前对其进行清理。

如果剥离插入CSS,Javascript或iframe的可能性,你应该没问题。如果您对用户的操作偏执,也可以拿走<img>标签。如果你真的偏执,你应该考虑使用Markdown,Textile或其他人。

+1

嗨fx_ - 非常感谢您的回复。我在Application.rb中有这个:'config.action_view.sanitized_allowed_tags =%w(h1 h2 h3 h4 b i p u p一个预先跨度宽度很大的罢工img)''。这是否结合'sanitize(@ notes.body)'去掉CSS,JS,iframe等? – sscirrus 2011-03-15 15:12:45

+0

_这个净化助手将html编码所有的标签,并去除所有不被明确允许的属性。 - - 参见['ActionView :: Helpers :: SanitizeHelpers#sanitize'](http://apidock.com/rails/ActionView/助手/ SanitizeHelper/sanitize方法) – 2011-03-16 02:09:06

相关问题