从 Rails 中清理 JSON 的最佳方法

Posted

技术标签:

【中文标题】从 Rails 中清理 JSON 的最佳方法【英文标题】:Best way to sanitize JSON from Rails 【发布时间】:2011-10-15 05:59:14 【问题描述】:

RoR 3 自动清理 ERB 模板(如果操作正确)。但是,我有一个小项目,我仅将 RoR 用于应用程序层,将 javascript 用于演示。因此,典型的请求是对 rails 路由的 ajax 调用并呈现返回的 json。问题是我目前可以注入 js,创建一个标题为 <script>alert('hello')</script> 的新产品,并在下一个请求时按原样返回,浏览器会愉快地解释脚本。

是不是最好

    清理帖子中的输入? 清理服务器上的 json 响应? (覆盖 to_json?) 清理客户端上的 json 响应?

感谢任何意见。

【问题讨论】:

【参考方案1】:

在向页面附加数据时,您应该在内容客户端对 html 实体进行编码。

问题是,您的其他产品字段是否有意包含也会被编码的链接或段落标签等标记?如果是这种情况,并且您打算在页面上将 json 响应的某些部分呈现为 HTML,那么您应该在创建新产品时清理您的输入,并限制 HTML您允许特定子集的标签,然后擦掉它们的属性。有一些库可以自动执行此过程,例如 sanitize gem。

【讨论】:

感谢您的周到回复。我将有一些模型属性,其中可能包含用户提供的标记。所以,我选择了一个观察者来清理 before_validation。 sanitize gem 很棒,但不会在 JRuby 等替代环境中构建,因为作者选择不支持它,所以更详细的解决方案会更好。

以上是关于从 Rails 中清理 JSON 的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

从 Rails 3 中的 lib 文件夹加载模块/类的最佳方法?

在 Rails 中清理输入 XSS 和 HTML 输入

从 Rails Helper 返回多个标签的最佳方法是啥?

Rails:放置在哪里以及如何调用预定的清理方法

如何在Rails 4中清理原始SQL

在 Ruby on Rails 中测试模型实例是不是为“空”的最佳方法是啥?