Я пытаюсь настроить политику CSP (взято из: Evil Martian Blog ):
Rails.application.config.content_security_policy do |policy|
policy.font_src :self, :https, :data
policy.img_src :self, :https, :data
policy.object_src :none
policy.style_src :self, :https, :unsafe_inline
# If you are using webpack-dev-server then specify webpack-dev-server host
if Rails.env.development?
policy.script_src :self, :http, :unsafe_inline
## policy.script_src :self, :http, :unsafe_eval
policy.default_src :self, :http, :unsafe_eval
policy.connect_src :self, :http, 'http://localhost:3035', 'ws://localhost:3035', 'http://localhost:3000', 'ws://localhost:3000'
else
policy.script_src :self, :https, :unsafe_inline
policy.default_src :self, :https
# Specify URI for violation reports
# policy.report_uri "/csp-violation-report-endpoint"
end
end
Есть две проблемы, которые, как представляется, мешают реализации в режиме разработки:
1 / кажется, что он предотвращает уведомление тостера (установлено из webpacker)
Как разрешить уведомления тостера?
Решено добавлением: unsafe_inline. в среду разработки также
2 / встроенный скрипт в приложении. html .erb
это тоже решаемо, но я буду рад переместить скрипт ниже, если смогу ссылаться на injectSvgSprite ('<% = asset_url ("icons / icons.svg")%>'). работать из папки javascript.
Как разрешить встроенный скрипт? Я счастлив переместить это в папку javascript, но не смог связать папку спрайтов.
заголовок содержит: <%= csrf_meta_tags %>
. и <%= csp_meta_tag %>
затем приходит:
<body>
<%= custom_bootstrap_flash %>
<%= yield %>
<script>
// ------------------------------------------------------- //
// Inject SVG Sprite -
// see more here
// https://css-tricks.com/ajaxing-svg-sprite/
// ------------------------------------------------------ //
function injectSvgSprite(path) {
var ajax = new XMLHttpRequest();
ajax.open("GET", path, true);
ajax.send();
ajax.onload = function(e) {
var div = document.createElement("div");
div.className = 'd-none';
div.innerHTML = ajax.responseText;
document.body.insertBefore(div, document.body.childNodes[0]);
}
}
injectSvgSprite('<%= asset_url("icons/icons.svg") %>')
</script>
<!-- Swiper Carousel -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.4.1/js/swiper.min.js"></script>
3 / в качестве вспомогательного здесь: Sipper нуждается в вышеуказанном CDN для работы
У меня установлен пряжа swiper, и он требуется в приложении. js, включите его в pack_tag, но мне все еще нужно сослаться на банку для javascript (css работал без него). Что я пропустил?