我的网站上有一个页面,希望用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文件中进行任何验证。
哪个选项似乎最好,最安全?我在这里错过了一个更简单的解决方案吗?
答案 0 :(得分:1)
我认为最好的选择是检查上传的JSON结构。它为用户提供了修复其JSON的机会。而且您不会存储无效数据。
此外,您可以使用 json-schema 之类的gem来不仅检查有效性,还检查JSON结构。