gpt4 book ai didi

python - IP白名单功能-Flask-Python3.x

转载 作者:行者123 更新时间:2023-11-30 22:07:56 32 4
gpt4 key购买 nike

我已经创建了一个将面向公众的网络应用程序。例如,IT 部门将使用一些管理工具来管理数据库中的某些内容。

我有数据库的所有路由和模型,我只是想了解一下我的函数是否是将 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 header 以查看它是否在我们的白名单中。

有什么我遗漏的东西可以在这里操纵吗?

我知道这可能是一个广泛或偏离主题的问题,但我也愿意接受其他方法来做到这一点。也许我在 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():

最佳答案

我会做这样的事情:

# helpers.py
from flask import request, current_app

def check_ip():
def decorator(f):
def wrapped_function(*args, **kwargs):
ip = request.environ.get('HTTP_X_REAL_IP', request.remote_addr)
if ip:
if ip in current_app.config.get('ALLOWED_IPS'):
return f(*args, **kwargs)
return 'Nice try! <3' # Do a real thing like real http code for forbiden, etc ... use response

return update_wrapper(wrapped_function, f)
return decorator




# routes.py
index = Blueprint('index ', __name__)
@index.route('/')
@check_ip()
def hello_world():
return render_template('home.html')

但是仅仅使用IP是不安全的,如果你想要更好的东西,你应该使用flask_login或者我认为类似的东西。

关于python - IP白名单功能-Flask-Python3.x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52334783/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com