2016-05-04 28 views
8

C'è un modo per impostare un intervallo di IP ALLOWED_HOSTS in django?Django ALLOWED_HOSTS Intervallo IP

Qualcosa di simile a questo:

ALLOWED_HOSTS = ['172.17.*.*'] 
+1

Stavo per rispondere "sì", ma ha fatto qualche ricerca su google e non riesce a trovare un esempio specifico in cui qualcuno lo abbia fatto. Secondo [docs] (https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts), puoi usare un jolly solitario nell'elenco, come 'ALLOWED_HOSTS = ['*'] ', (che non è raccomandato per motivi di sicurezza) ma non ho ancora visto niente come il tuo esempio. Sono ancora incline al "sì" ma non sarò convinto finché non vedrò un riferimento che lo dichiari esplicitamente. Questa potrebbe essere una domanda stupida, ma l'hai provata per vedere se farà sorgere qualche errore in django? – Nez

+0

Sarebbe meglio scaricarlo su un server Web che è stato creato per gestirlo in modo efficiente. O forse persino impostare le regole del firewall, maggiore è la quantità di traffico che può essere filtrata meglio è. – serg

+0

@Nez, si lo faccio. Guarda la mia risposta qui sotto. Ho trovato la soluzione per questo problema. –

risposta

7

ho postato un biglietto su Django però mi è stato mostrato questo potrebbe essere realizzato nel modo seguente

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

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

+0

L'aggiornamento dei creatori di fall per Windows 10 ha rotto questo metodo per me, poiché 'gethostname()' restituiva invece l'indirizzo dello switch ethernet Hyper-V. Puoi usare 'ALLOWED_HOSTS = [gethostname(),] + gethostbyname_ex (gethostname()) [2]' invece. –

4

No, questo non è possibile. Secondo the docs, la seguente sintassi è supportata:

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

Se si guarda l'attuazione del metodo validate_host, si può vedere che usando * come un jolly non è supportata.

+0

Aha, grazie. Non stavo guardando abbastanza da leggere il codice stesso. – Nez

2

ho trovato questa soluzione per il filtraggio gamma di IP:

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

Usando questo approccio siamo in grado di filtrare gli IP con qualsiasi mezzo (f.e. con espressioni regolari).

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 

Grazie per @Zorgmorduk

1

Ecco una rapida e soluzione sporca.

allowed_hosts + = [ '172.17.% S.% S' % (i, j) per i in range (256) per j nella gamma (256)]