python - 我是否能够为 Flask 提供 IP 白名单范围,而不是 IP 列表?
问题描述
我有一个基本的烧瓶服务器,用于通过 Google 聊天机器人进行 Python 开发。我想将可以访问服务器的 IP 范围限制在一定范围内。为此,例如 123.0.0.1 到 123.255.255.255。
从网上看到的类似问题,我知道如何轻松地为单个 IP 执行此操作。
从烧瓶导入中止,请求
@app.before_request
def limit_remote_addr():
if request.remote_addr != '123.0.0.1':
abort(403) # Forbidden
但我不想对每个IP都这样做,或者必须列出一个列表。那可能吗?还是我最好配置我的防火墙以删除此步骤?
解决方案
正如@Klaus D. 提到的,您可以检查远程地址是否以地址的一部分开头。
您可以检查远程地址是否列在@before_request
装饰器中的特定 IP 地址列表中。
在这里,我展示了一个在 Python 中将 IP 地址列入白名单的示例。
使用本地网络(通过 WiFi 连接)进行测试。
Flask 服务器的本地 IP 地址:192.168.0.107
app.py
:
from flask import abort, Flask, render_template, request
ALLOWED_IPS = ['192.168.1.', '127.0.0.1']
app = Flask(__name__)
@app.errorhandler(403)
def permission_error(e):
return render_template('403.html', error_code=403), 403
@app.before_request
def limit_remote_addr():
client_ip = str(request.remote_addr)
valid = False
for ip in ALLOWED_IPS:
if client_ip.startswith(ip) or client_ip == ip:
valid = True
break
if not valid:
abort(403)
@app.route('/', methods = ['GET'])
def home():
return "Your IP: {}".format(request.remote_addr)
if __name__ == '__main__':
app.run(host='0.0.0.0', debug=True)
403.html
:
<h3>Your IP address is not white listed</h3>
输出:
从不在ALLOWED_IPS
列表中的 IP 访问应用程序:
从列表中的 IP 访问应用程序ALLOWED_IPS
:
ALLOWED_IPS
将列表更新为 后ALLOWED_IPS = ['192.168.0.', '127.0.0.1']
,我可以从以下位置访问 Flask 应用程序192.168.0.107
:
推荐阅读
- asp.net - asp core web api http post为空
- octave - 如何在 octave/matlab 中编写 erf 求和系列?
- python - 将列表从字符串转换为 int 但有一个问题
- svelte - Sveltestrap 下拉选择值
- schemacrawler - 无法在 schemacrawler 中写入输出文件
- python - 如何使用 BERT 模型和 TensorflowLite 预测(分类)用户句子
- java - Paypal Native Checkout Button 不断加载,然后在 Android 上消失
- javascript - 如何在html中循环javascript变量和数组?
- pytorch - RuntimeError:无法分配字节对象!在torch.save
- lua - A* 启发式寻路无法正常工作