HTML 仅 Ruby 的安全 JSON 生成

HTML Safe JSON generation with Ruby only

我需要将 JSON 对象嵌入到 HTML 数据属性中。使用 Ruby to_json

RubyArrayOfHashes.to_json

生成正确的 JSON 字符串,但不会转义。所以我在 HTML:

中得到了这个
data-track="[{"source_id":7}]"

由于双引号未被转义,上述内容无效。

在ruby中是否有等效于JS JSON.stringify()函数的函数?

我需要在我的数据属性中使用它,而不是在脚本标记中。

由于您没有使用更常见的自动转义值的模板框架,因此您需要手动确保您向 HTML 发出的所有用户提供的值都已正确转义。

您可以使用 CGI 模块作为 Ruby 附带的模块:

require 'cgi'
def h(value)
  CGI.escapeHTML(value)
end

json = RubyArrayOfHashes.to_json
html = "<div data-track=\"#{h json}\">something</div>

请注意,根据对发出的数据的解释方式,您可能需要使用其他转义方法。如果你是在 <script> 标签之间发出 Javascript 代码,你需要以不同的方式转义它。

一般来说,您应该研究自动转义值的方法,类似于 Rails 在最新版本中所做的。当您忘记转义某些数据时,必须手动转义所有发出的值会很快导致错误,从而导致 XSS 漏洞等安全问题。