Turbolinks - отказался выполнять встроенный скрипт, поскольку он нарушает следующую политику безопасности контента - PullRequest
0 голосов
/ 17 октября 2018

Я использую "Turbolinks 5.1.0".


файл: Gemfile

gem 'turbolinks', '~> 5.1'


файл: заголовок макета приложения

<%= javascript_include_tag "application", nonce: true %>

файл: config / initializers / content_security_policy.rb

Rails.application.config.content_security_policy_nonce_generator = -> request {SecureRandom.base64 (16)}


Ошибка консоли Google Chrome

VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243

[Только отчет] Отказ от выполнения встроенного сценария, поскольку он нарушает следующую директиву политики безопасности содержимого: «script-src 'self' https: 'unsafe-inline' 'nonce-UiVx2CiP0HHN9jOOSEG43g =='".Обратите внимание, что «unsafe-inline» игнорируется, если в списке источников присутствует хеш или одноразовое значение.

n.assignNewBody @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
n.replaceBody @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
(anonymous) @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
t.renderView @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
n.render @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
t.render @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
e.renderSnapshot @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
e.render @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
t.render @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
(anonymous) @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243
(anonymous) @ VM32 application-ae291f799496478302742f713e72f20a7958b7077387b87e18ab98c51ec979c4.js:243

Для решения этой проблемы, кажется, у меня есть дваРешения, перечисленные ниже

1) Используйте data-turbolinks-track: reload

<%= javascript_include_tag "application", 'data-turbolinks-track': :reload, nonce: true %>

ИЛИ

2) Повторно используйте тот же одноразовый номер, используяСеанс-хранилище для запросов TurboLink, это правильный способ решения этой проблемы?

Rails.application.config.content_security_policy_nonce_generator = -> request do
  # use the same csp nonce for turbolinks requests
  if request.env["HTTP_TURBOLINKS_REFERRER"].present? && request.session["mykey"].present?
    request.session["mykey"]
  else
    request.session["mykey"] = SecureRandom.base64(16)
  end
end

Пожалуйста, предложите правильное решение здесь!

...