Ответьте * .js.erb, используя одноразовую стратегию для CSP - PullRequest
0 голосов
/ 03 января 2019

Я внедряю CSP с использованием rails 5.2.1 политики безопасности контента DSL.Моя политика настроена на что-то вроде:

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!");

Объект успешно создан, но я считаю, что политика блокирует вышеуказанное "Added" сообщение об успехе, которое я добавляю в DOM.Я не видел никаких ошибок в консоли, поэтому я не уверен, куда идти дальше.

В этом сценарии я понимаю, что теги сценария временно вставляются с содержимым файла *.js.erb, и эти теги сценария не содержат одноразового номера.Или это несоответствие.

Я застрял на том, как устранить неполадки отсюда.Любое руководство здесь очень ценится, даже если другой путь архитектуры для отправки данных клиенту - это путь вперед.Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...