Cette extension fournit un moyen de restreindre l'accès à votre application Flask en fonction du nom d'hôte ou de l'adresse IP ou de la plage d'adresses IP de la demande entrante (réseau).
Installez le package à l'aide de PIP:
pip install flask-allowed-hostsAllowedHosts .@allowed_hosts.limit() décorateur (facultatif). from flask import Flask , jsonify , abort
from flask_allowed_hosts import AllowedHosts
app = Flask ( __name__ )
ALLOWED_HOSTS = [ "93.184.215.14" , "api.example.com" ]
def custom_on_denied ():
error = { "error" : "Oops! Looks like you are not allowed to access this page!" }
return jsonify ( error ), 403
allowed_hosts = AllowedHosts ( app , allowed_hosts = ALLOWED_HOSTS , on_denied = custom_on_denied )
# Allows all incoming requests
@ app . route ( "/api/public" , methods = [ "GET" ])
def public_endpoint ():
data = { "message" : "This is public!" }
return jsonify ( data ), 200
# Only allows incoming requests from "93.184.215.14" and "api.example.com"
@ app . route ( "/api/private" , methods = [ "GET" ])
@ allowed_hosts . limit ()
def private_endpoint ():
data = { "message" : "This is private!" }
return jsonify ( data ), 200
# We can override the allowed_hosts list and the on_denied function for each route
@ app . route ( "/api/private/secret" , methods = [ "GET" ])
@ allowed_hosts . limit ( allowed_hosts = [ "127.0.0.1" ], on_denied = lambda : abort ( 404 ))
def secret_private_endpoint ():
data = { "message" : "This is very private!" }
return jsonify ( data ), 200
if __name__ == '__main__' :
app . run ( host = '0.0.0.0' , port = 5000 , debug = True )AVERTISSEMENT : Cette approche peut provoquer un comportement inattendu lorsqu'il est combiné avec l'utilisation basée sur la classe.
@limit_hosts décorateur. from flask import Flask , jsonify
from flask_allowed_hosts import limit_hosts
app = Flask ( __name__ )
ALLOWED_HOSTS = [ "93.184.215.14" , "api.example.com" ]
def custom_on_denied ():
error = { "error" : "Custom Denied Response" }
return jsonify ( error ), 403
# Allows all incoming requests
@ app . route ( "/api/public" , methods = [ "GET" ])
def public_endpoint ():
data = { "message" : "This is public!" }
return jsonify ( data ), 200
# Only allows incoming requests from "93.184.215.14" and "api.example.com"
@ app . route ( "/api/private" , methods = [ "GET" ])
@ limit_hosts ( allowed_hosts = ALLOWED_HOSTS , on_denied = custom_on_denied )
def private_endpoint ():
return jsonify ({ "message" : "This is private!" }), 200Vous pouvez trouver plus d'exemples dans le répertoire des exemples.
app : L'instance d'application FLASK (facultative).allowed_hosts : Liste des hôtes autorisés (facultatif, par défaut, None qui permet à tous les hôtes).on_denied : fonction pour le comportement d'accès refusé (facultatif).L'extension respecte ces configurations:
ALLOWED_HOSTS : Liste des hôtes autorisés dans la configuration du flacon.ALLOWED_HOSTS_ON_DENIED : Fonction pour le comportement d'accès refusé dans Flask Config.Précédence : valeurs fournies lors de l'initialisation des valeurs de configuration du flacon de remplacement.
Vous pouvez activer le mode de débogage en définissant la variable d'environnement ALLOWED_HOSTS_DEBUG sur True :
export ALLOWED_HOSTS_DEBUG= " True "Cela imprimera les messages de débogage utiles à la console.
Les contributions sont les bienvenues! N'hésitez pas à soumettre une demande de traction.
Si vous avez des questions ou des commentaires, n'hésitez pas à ouvrir un problème ou une demande de traction.
Ce projet est concédé sous licence [MIT] - Voir le fichier Licence.md pour plus de détails.