Я использую flask для веб-приложения в стиле блога, и я хочу установить https на каждой странице. Приложение работает так, как задумано, без политики безопасности контента.
Я хочу использовать пакет flask-talisman
для управления этим. В их базовых c примерах и в связанных постах я уже нашел, как разрешить bootstrap работать, позволяя сценариям / стилям из указанных c источников следующим образом
SELF = "'self'"
content_security_policy={
'default-src': [
SELF,
"https://code.jquery.com", #jquery
"https://cdn.jsdelivr.net", # popper
"https://stackpath.bootstrapcdn.com", # bootstrap
],
'img-src': '*',
'script-src': [
SELF,
"https://code.jquery.com", #jquery
"https://cdn.jsdelivr.net", # popper
"https://stackpath.bootstrapcdn.com", # bootstrap
],
'style-src': [
SELF,
"https://stackpath.bootstrapcdn.com", # bootstrap
]
}
Однако я хочу использовать редактор WYSIWYG, такой как CKEditor , чтобы я мог загружать изображения и получать больше форматированного текста. Вот изображение того, как это выглядит до включения flask-talisman
.
После того же лога c, как указано выше, чтобы разрешить bootstrap, это будет означать просто добавление дополнительной ссылки "https://cdn.ckeditor.com"
к обоим стилям и скриптовые источники.
Однако, если я добавлю это на страницу, редактор не будет работать (не отвечает) и будет выглядеть так:
As объяснил на их github, я также использую nonce
, чтобы явно разрешить определенные сценарии, такие как генерация самого редактора, используя
<script nonce="{{ csp_nonce() }}">
и при регистрации приложения я добавил content_security_policy_nonce_in=['script-src']
в инициализация. Тем не менее, во время рендеринга страницы генерируются другие скрипты, и я понятия не имею, как добавить к ним одноразовые номера.
Может кто-нибудь указать мне правильное направление к решению этой проблемы? Или, может быть, предложить другую стратегию для редактора WYSIWYG в HTTPS? Я также изучаю использование редактора уценок, но думаю, что это вызовет те же проблемы.
РЕДАКТИРОВАТЬ: сейчас я использую ответ здесь , который вызывает https, но делает не применять CSP.