在 Rails 中清理输出 HTML(以避免 XSS 攻击)的最佳解决方案是什么?
我有两个选择:来自 Sanitize Helper http://api.rubyonrails.com/classes/ActionView/Helpers/SanitizeHelper.html的 white_list 插件或 sanitize 方法。直到今天对我来说,white_list 插件工作得更好,在过去,Sanitize 有很多错误,但作为核心的一部分,它可能正在开发中并得到支持一段时间。
在 Rails 中清理输出 HTML(以避免 XSS 攻击)的最佳解决方案是什么?
我有两个选择:来自 Sanitize Helper http://api.rubyonrails.com/classes/ActionView/Helpers/SanitizeHelper.html的 white_list 插件或 sanitize 方法。直到今天对我来说,white_list 插件工作得更好,在过去,Sanitize 有很多错误,但作为核心的一部分,它可能正在开发中并得到支持一段时间。
我认为 h 辅助方法将在这里工作:
<%= h @user.profile %>
这将转义尖括号,因此中和任何嵌入的 JavaScript。当然,这也将消除您的用户可能使用的任何格式。
如果你想要格式化,也许看看markdown。
就我个人而言,我认为在任何 Web 应用程序中接受任何 HTML 条目都不是一个小决定。您可以随心所欲地测试白名单/黑名单标签,但除非您正在测试正确的嵌套,否则有人可能会输入一系列结束标签,例如
</td></tr></span></div>
真的弄乱了你的布局。
我通常会给人们类似 Textile 的东西来输入他们的标记,因为我宁愿把时间花在业务逻辑上而不是 HTML 解析上。
当然,如果此文本条目对您的应用程序更重要(例如它用于 stackoverflow),那么您可能应该更多地关注您自己的手动滚动。