仅 使用Flask的功能,您可以使用before_request()
钩子测试request.remote_addr
属性:
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
列表以访问实际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