python - 如何限制单个IP地址访问Flask?

标签 python flask ip-address

我正在使用 Python 开发网站 Flask framework我现在做一些开发,将我的更改推送到远程开发服务器。我将此远程开发服务器设置为使用 app.run(host='0.0.0.0') 公开为网站提供服务。

这工作正常,但我只是不想让其他人查看我的网站。出于这个原因,我想以某种方式将我的 ip 列入白名单,以便开发服务器仅将网站提供给我自己的 ip 地址,不提供任何响应、404 或其他对其他 ip 地址的无用响应。我当然可以将服务器设置为使用 apache 或 nginx 来实际为网站提供服务,但我喜欢在代码更改时自动重新加载网站以开发我的网站

那么有人知道使用内置的 Flask 开发服务器来做到这一点的方法吗?欢迎所有提示!

最佳答案

使用 Flask 的功能,您可以使用 before_request() hook测试 request.remote_addr attribute :

from flask import abort, request

@app.before_request
def limit_remote_addr():
    if request.remote_addr != '10.20.30.40':
        abort(403)  # Forbidden

但在服务器上使用防火墙规则可能是更安全、更可靠的选择。

请注意,如果浏览器和您的服务器之间存在反向代理,则可以屏蔽 Remote_Addr;小心你如何限制这一点,不要把自己锁在外面。如果代理靠近服务器本身(如负载平衡器或前端缓存),您可以检查 request.access_route list访问实际的IP地址。 仅当 remote_addr 本身也是受信任的 IP 地址时才执行此操作:

trusted_proxies = ('42.42.42.42', '82.42.82.42', '127.0.0.1')

def limit_remote_addr():
    remote = request.remote_addr
    route = list(request.access_route)
    while remote in trusted_proxies:
        remote = route.pop()

    if remote != '10.20.30.40':
        abort(403)  # Forbidden

关于python - 如何限制单个IP地址访问Flask?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22251038/

相关文章:

flask - 在 jinja2 中包装 block

python - 并排输入表单 - HTML、Flask

Python Flask - request.json 返回无类型而不是 json 字典

meteor - 使用 Modulus 从 Meteor 访问客户端的 IP 地址(不是负载均衡器的)

amazon-web-services - Amazon s3 预签名 URL 受 IP 地址限制

python - 谷歌应用引擎 : Inject page-dependent CSS

python - 如何在python中删除firebase电子邮件身份验证用户?

python - 属性错误: 'numpy.ndarray' object has no attribute 'getA1'