Панель мониторинга Flask не работает с after_request

#python #flask #content-security-policy

#python #flask #контент-безопасность-политика

Вопрос:

Модуль панели мониторинга Flask не работает нормально, когда @app.after_request используется на сервере Flask.

Если я удалю @app.after_request, панель мониторинга будет работать нормально.

Я хочу включить несколько вещей в @app.after_request .

 @app.after_request
def after_request(response):
    s= 'request:' str(request.data) " n " str(request.remote_addr) "  " str(request.method) "  "  str(request.scheme) "  "  str(request.full_path) "  " str(response.status) " n " "response returned :"  str(response.data)
    print(s)
    debugPrint(str(inspect.stack()[0][3]),s)
    response.headers['Strict-Transport-Security'] = 'max-age=31536000; includeSubDomains'
    response.headers['Content-Security-Policy'] = "default-src 'self'"
    response.headers['X-Content-Type-Options'] = 'nosniff'
    response.headers['X-Frame-Options'] = 'SAMEORIGIN'
    response.headers['X-XSS-Protection'] = '1; mode=block'

    return response
 

когда этот код включен, отображается панель мониторинга flask

Панель мониторинга Flask

Журнал консоли, когда я проверяю панель мониторинга Flask

Журнал консоли

Пожалуйста, помогите мне решить эту проблему.

Комментарии:

1. Какие-либо ошибки в консоли? Добавление Content-Security-Policy default-src ‘self’ является ограничительным и может блокировать несколько запросов.

Ответ №1:

Как замечает @Halvor Sakshaug выше, ваша проблема заключается в строке:

     response.headers['Content-Security-Policy'] = "default-src 'self'"
 

Если вы заглянете в консоль своей страницы, вы увидите кучу сообщений вида:

 Refused to load the script 'https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.js' because it violates the following Content Security Policy directive: "default-src 'self'". Note that 'script-src-elem' was not explicitly set, so 'default-src' is used as a fallback.

Refused to load the script 'https://unpkg.com/sunburst-chart' because it violates the following Content Security Policy directive: "default-src 'self'". Note that 'script-src-elem' was not explicitly set, so 'default-src' is used as a fallback.
 

Поскольку внешние URL-адреса загружают критически важные ресурсы (например, Angular), а ваша желаемая политика содержимого предотвращает это, на данный момент вы можете заставить панель мониторинга Flask работать, только ослабив свою политику безопасности содержимого.

Линия, которая позволяет использовать все внешние ресурсы, необходимые для FMD, является:

     response.headers['Content-Security-Policy'] = "script-src 'self' cdnjs.cloudflare.com/ajax/ ajax.googleapis.com/ajax/ unpkg.com/sunburst-chart;"
 

PS Обратите внимание, что ваш код также поврежден, потому request что var не определен в области действия after_request функции.

Комментарии:

1. Привет @mircealungu, спасибо за ваш ответ, но я даже пытался закомментировать заголовки ответов и по-прежнему не могу использовать панель мониторинга и сталкиваюсь с той же проблемой, а также могу распечатать запрос в функции after_request

2. Убедитесь, что вы перезапустили сервер Flask после внесения изменений. Если вы не находитесь в режиме отладки, они не отображаются в противном случае. О запросе: возможно, вы определили его где-то еще в области видимости, я думаю.

3. Конечно, @mircealungu, я перезапускал сервер раньше, прежде чем публиковать здесь, и даже проверил его сейчас, но это то же самое.

4. Есть еще одна проблема с FMD. Если вы используете CSRFProtect из flask_wtf и выполняете CSRFProtect(app) , а затем пытаетесь войти в FMD, вы получите 400 НЕВЕРНЫХ ЗАПРОСОВ.