Pregunta Django ALLOWED_HOSTS Rango de IP


¿Hay alguna manera de establecer un rango de IPs ALLOWED_HOSTS en django?

Algo como esto:

ALLOWED_HOSTS = ['172.17.*.*']

15
2018-05-04 15:12


origen


Respuestas:


Publiqué un boleto en Django sin embargo, se me mostró que esto se podía lograr haciendo lo siguiente

from socket import gethostname, gethostbyname 
ALLOWED_HOSTS = [ gethostname(), gethostbyname(gethostname()), ] 

https://code.djangoproject.com/ticket/27485


13
2017-11-17 22:06



No, esto no es posible en la actualidad. De acuerdo a los documentos, la siguiente sintaxis es compatible:

['www.example.com']  # Fully qualified domain
['.example.com']  # Subdomain wildcard, matches example.com and www.example.com 
['*']  # Matches anything

Si nos fijamos en la implementación de la validate_host método, se puede ver que usando * como un comodín no es compatible.


11
2018-05-04 16:44



Encontré tal solución para el rango de filtrado de direcciones IP:

https://stackoverflow.com/a/36222755/3766751

Usando este enfoque, podemos filtrar las IP de cualquier manera (por ejemplo, con expresiones regulares).

from django.http import HttpResponseForbidden

class FilterHostMiddleware(object):

    def process_request(self, request):

        allowed_hosts = ['127.0.0.1', 'localhost']  # specify complete host names here
        host = request.META.get('HTTP_HOST')

        if host[len(host)-10:] == 'dyndns.org':  # if the host ends with dyndns.org then add to the allowed hosts
            allowed_hosts.append(host)
        elif host[:7] == '192.168':  # if the host starts with 192.168 then add to the allowed hosts
            allowed_hosts.append(host)

        if host not in allowed_hosts:
            raise HttpResponseForbidden

        return None

Gracias por @Zorgmorduk


2
2018-05-04 18:30



Aquí hay una solución rápida y sucia.

ALLOWED_HOSTS + = ['172.17.% S.% S'% (i, j) para i en el rango (256) para j en el rango (256)]


2
2017-07-24 18:54



Mozilla ha lanzado un paquete de Python llamado django-allow-cidr que está diseñado para resolver exactamente este problema.

los anuncio blog post explica que es útil para cosas como controles de salud que no tienen un Host encabezado y simplemente use una dirección IP.

Tendrías que cambiar tu dirección IP '172.17.*.*' ligeramente para ser un Rango CIDR me gusta 172.17.0.0/16


2
2018-05-09 15:03