在Rails中安全清理用户上传的json

时间:2019-06-16 12:10:14

标签: javascript ruby-on-rails json erb

我的网站上有一个页面,希望用Javascript解析一些用户定义的JSON。

我正在尝试考虑清理JSON的最佳方法,以使其中没有任何XSS。

允许用户上传JSON的最简单解决方案是:

var someJSON = <%= @my_object.json_blob.html_safe %>;

但是,由于json_blob是由用户上传的,因此不安全,因此它可能具有Javascript代码,并且不是有效的JSON。

我想到的下一个选择是:

var someJSON = <%= JSON.parse(@my_object.json_blob).to_json.html_safe %>;

我认为这是完全安全的,因为它现在必须是有效的JSON而不是Javascript代码。我说得对吗?

该方法的问题在于它非常不直观,涉及到将其转换为哈希然后再次返回到JSON,而不仅仅是检查JSON的有效性。

最后,我还可以在上传之前检查JSON是否有效,并且仅在有效JSON时才上传到数据库。这样,我就不必在ERB文件中进行任何验证。

哪个选项似乎最好,最安全?我在这里错过了一个更简单的解决方案吗?

1 个答案:

答案 0 :(得分:1)

我认为最好的选择是检查上传的JSON结构。它为用户提供了修复其JSON的机会。而且您不会存储无效数据。

此外,您可以使用 json-schema 之类的gem来不仅检查有效性,还检查JSON结构。