对CSP使用nonce策略响应* .js.erb

时间:2019-01-03 05:54:05

标签: javascript ruby-on-rails ajax content-security-policy

我正在使用Rails 5.2.1内容安全策略DSL实施CSP。我已将政策设置为:

Rails.application.config.content_security_policy do |policy|
  policy.default_src :self, :https
  policy.connect_src :self
  #...
  policy.script_src  :self
end

# If you are using UJS then enable automatic nonce generation
Rails.application.config.content_security_policy_nonce_generator = -> request { SecureRandom.base64(16) }

我的<%= csp_meta_tag %>中也有application.html.erb

这时,我需要在任何内联脚本中添加一个nonce: true标志,以使它们满足策略。我已经做到了,它按预期工作。但是,我在维护现有的AJAX样式功能时遇到麻烦。例如,我有类似的内容(请注意remote: true):

# index.html.erb
<%= link_to create_object_path, id: "#{object.code}",method: :post, remote: true do %>
<button type="button">Create object</button>
<% end %>

在我的控制器中

def create
  @object = current_user.object.create
  respond_to do |format|
    if @object
      format.js
    else
      redirect_back
      format.html
    end
  end
end

在我的*.js.erb文件中

$("#<%= @object.service.id %>").text("Added!");

该对象已成功创建,但我认为该策略阻止了我添加到DOM的上述"Added"成功消息。我没有在控制台中看到任何错误,所以我不确定从这里去哪里。

在这种情况下,我的理解是脚本标记会临时插入*.js.erb文件的内容,并且这些脚本标记不包含随机数。或者,这是不匹配的。

我一直在从这里解决问题。即使将数据发送到客户端的不同体系结构模式是前进的方向,此处的任何指导也将受到赞赏。预先感谢。

0 个答案:

没有答案