Перенаправить http на https колбу + appengine - PullRequest
0 голосов
/ 19 октября 2018

У меня есть сайт, работающий на google app engine с частным днс.

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

РЕДАКТИРОВАТЬ: Iзабыл упомянуть, что я использую гибкую среду

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

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

@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)

Большое спасибо за помощь!

Ответы [ 4 ]

0 голосов
/ 03 декабря 2018

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

талисман = Talisman (app, content_security_policy = csp, content_security_policy_nonce_in = ['script-src'], force_https_ 'true_entmanent ='true')

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

0 голосов
/ 19 октября 2018

Вы можете проверить https более непосредственно, используя:

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

или даже:

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

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

#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 голосов
/ 19 октября 2018

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

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

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

0 голосов
/ 19 октября 2018

проверить это перенаправление фляги 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)
...