Django, CSP: Как активировать Nonce в скриптах для страниц администратора
На моей странице скрипты выполняются только тогда, когда включен тег nonce (из-за настроек CSP).
Почему на страницах администратора не работают скрипты.
Поэтому сейчас я перезаписываю все шаблоны администратора, например, из:
<script src="{% static 'admin/js/nav_sidebar.js' %}" defer></script>
to
<script src="{% static 'admin/js/nav_sidebar.js' %}" nonce="{{request.csp_nonce}}" defer></script>
Есть ли более простой способ сделать это? Деактивировать CSP на страницах администратора или как-то сказать Django добавить Nonce ко всем скриптам?
Спасибо
Ок Я также могу добавить все хэши скриптов в CSP, это тоже работает. Но, может быть, есть и другое решение?
Вот быстрый способ, который я только что придумал и который может вам помочь. Это не исправляет корневую проблему в оригинале, которая заключается в том, что ресурсы не содержат nonce, но вы можете добавить вторую ссылку на ресурс, который включает nonce (предполагается, что все ваши настройки CSP работают). Учитывая приведенный ниже пример с calendar.js
, ссылка на него в HTML будет дана дважды. Первая выдаст ошибку CSP, но вторая будет работать. Ваша консоль будет немного беспорядочной, но все ваши вещи с использованием nonce снова будут работать.
- В ваш базовый каталог
templates
добавьте еще один каталог с названиемadmin
.
- Там создайте файл под названием
base.html
, т.е.templates/admin/base.html
. Именно в нем вы будете добавлять дополнительные материалы.
Вот и все.
Дополнительный материал внутри вашего локального :templates/admin/base.html
{% extends "admin/base.html" %}
{% load static %}
{% block extrastyle %}
<script nonce="{{request.csp_nonce}}" src="/static/admin/js/calendar.js"></script>
<!-- whatever else you need with a nonce -->
{% endblock %}