2011-07-28 43 views
0

RoR 3自动清理ERB模板(正确完成时)。但是,我有一个小项目,我只将RoR用于应用程序层,而javascript用于演示文稿。所以,典型的请求是ajax调用rails路径并呈现返回的json。问题是,目前我有可能注入js,创建一个标题为<script>alert('hello')</script>的新产品,并且按照下一个请求返回,并且浏览器愉快地解释脚本。从Rails消毒JSON的最佳方式

它是最好

  1. 消毒后上的投入?
  2. 清理服务器上的json响应? (覆盖to_json?)
  3. 消毒客户端上的json响应?

我很欣赏任何输入。

回答

1

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

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

+0

谢谢你的深思熟虑的回应。我将有一些模型属性可能包含用户提供的标记。所以,我选择了一个观察者来清理before_validation。 –

+0

净化宝石非常棒,但不会在JRuby等其他环境中构建,因为作者选择不支持它,所以更详细的解决方案会更好。 – rcd