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