0

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

RubyArrayOfHashes.to_json

生成正确的 JSON 字符串,但不会转义。所以我在我的 HTML 中得到了这个:

data-track="[{"source_id":7}]"

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

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

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

4

1 回答 1

0

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

您可以将CGI模块用于 Ruby 附带的模块:

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

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

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

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

于 2019-07-31T13:16:06.100 回答