Перенаправить http на https колбу + appengine

1

У меня есть сайт, работающий в Google App Engine с частным DNS.

Но каждый раз, когда я открываю этот веб-сайт, он открывается как http, я пытался использовать декоратор before_request на фляже, чтобы изменить http на https, но я получаю ошибку too_many_redirects, я также пытался использовать ProxyFix, но так как моя страница не имеет X-Forwarded-Proto как заголовок не перенаправляет на правильную страницу.

EDIT: Я забыл упомянуть, что я использую гибкую среду

Каков наилучший способ настроить это поведение? Где я могу установить эту конфигурацию и, если возможно, как ее установить?

Вот как я пытался перенаправить:

@app.before_request
def before_request():
    if request.endpoint in app.view_functions and request.headers.get('X-Forwarded-Proto', None) == 'http':
        code = 301
        return redirect(request.url.replace('http://', 'https://'), code=code)

спасибо очень много для помощи!

Теги:
flask
google-app-engine

4 ответа

1

Вы можете напрямую проверить https:

if request.environ.get('HTTPS') == 'off':
    return redirect(...)

или даже:

if not request.is_secure:
    return redirect(...)

Но вам также нужно иметь дело со временем, когда вы не хотите перенаправления (localhost, версии, cron jobs и т.д.). Начните с:

#so can test versions, don't redirect appspot urls:
if "appspot" in request.environ.get('HTTP_HOST'):
    return None

if os.environ['SERVER_NAME'].startswith('1') or os.environ['SERVER_NAME'].startswith('localhost'):
    return None

user_agent = request.environ.get('HTTP_USER_AGENT', 'fake')

# cron, taskqueue, module, development, no redirect
if (    'AppEngine-Google' in user_agent or 
        'my-module' in request.environ.get('CURRENT_MODULE_ID')):
    return None
0

Я также запускаю флеш-приложение в приложении. Используйте флажок-талисман и установите для параметра force_https_permanent значение true и force_https значение true https://github.com/GoogleCloudPlatform/flask-talisman

talisman = Talisman (приложение, content_security_policy = csp, content_security_policy_nonce_in = ['script-src'], force_https_permanent = 'true', force_https = 'true')

В примере выше woold также добавлен csp, который также очень полезен для безопасности.

0

проверьте эту флэшку python на https с http

@app.before_request
def before_request():
    if request.url.startswith('http://'):
        url = request.url.replace('http://', 'https://', 1)
        code = 301
        return redirect(url, code=code)
0

Поскольку вы используете App Engine, вы, вероятно, просто хотите изменить свой app.yaml чтобы всегда требовать, чтобы URL был безопасным. Например:

- url: .*
  script: main.app
  secure: always

Параметр seucre: always гарантирует, что все запросы, направляемые этим правилом, будут зашифрованы. Не нужно вообще включать Flask.

  • 0
    Я забыл упомянуть, что я использую гибкую среду, поэтому флаг безопасности не работает
  • 0
    Понимаю. Ну, если ваш прокси не добавляет X-Forwarded-Proto , я не уверен, что вы можете сделать, чтобы выяснить, как добавить https. Я бы сказал, что это больше проблема с вашим прокси, чем с Python или Flask, потому что они не участвуют тогда. Однако я бы попытался создать страницу, которая распечатывает все заголовки ваших запросов, чтобы увидеть, можно ли добавить что-то, что вы можете использовать вместо X-Forwarded-Proto .
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню