Я создал веб-приложение, которое будет общедоступным.Есть некоторые инструменты администратора, которые ИТ-отдел будет использовать, например, для администрирования определенных вещей в базах данных.
У меня есть все мои маршруты и модели для базы данных, я просто хочу получить представление о том, будет ли моя функциябыть подходящим методом внесения в белый список IP-адресов для маршрутов, и если я что-то пропустил.
def allowed_ip(request):
if not request:
now = time.strftime("%b-%d-%Y_%H:%M:%S", time.gmtime(time.time()))
app.logger.info('No request was sent -=- {}'.format(now))
return False
if request and request.headers['X-Real-IP']:
if request.headers['X-Real-IP'] not in config.Config.ALLOWED_IPS:
now = time.strftime("%b-%d-%Y_%H:%M:%S", time.gmtime(time.time()))
app.logger.info('Request received from non-whitelist client {} -=- {}'.format(request.headers['X-Real-IP'],
now))
return False
else:
now = time.strftime("%b-%d-%Y_%H:%M:%S", time.gmtime(time.time()))
app.logger.info('Request received from whitelisted client {} -=- {}'.format(request.headers['X-Real-IP'],
now))
return True
else:
now = time.strftime("%b-%d-%Y_%H:%M:%S", time.gmtime(time.time()))
app.logger.info('Request received from but no IP sent -=- {}'.format(now))
return False
Функция проверяет, получил ли он запрос (я знаю, что это кажется бессмысленным, но я получал некоторые странные ошибки без этогострока), если он получил запрос, он проверяет заголовок X-Real-IP, чтобы увидеть, есть ли он в нашем белом списке.
Есть ли что-то, что я пропускаю, что можно здесь манипулировать?
Я ценю, что это может быть широкий или не по теме вопрос, но я также открыт для других способов сделать это.Возможно, для меня было бы лучше управлять белым списком на уровне Nginx?
Мой ответ адаптирован в мой код:
from functools import wraps
def whitelisted(f):
@wraps(f)
def decorated_function(*args, **kwargs):
if request.headers['X-Real-IP'] not in app.config.get('ALLOWED_IPS'):
return redirect(url_for('login', next=request.url))
return f(*args, **kwargs)
return decorated_function
Теперь это возможно:
@app.route('/map')
@whitelisted
@login_required
def show_all():