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 漏洞等安全问题。
我需要将 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 漏洞等安全问题。