2016-05-04 2 views
8

Есть ли способ установить диапазон IP-адресов ALLOWED_HOSTS в django?Django ALLOWED_HOSTS IPs range

Что-то вроде этого:

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

Я собирался ответить "да", но сделал некоторые ковышки google и не может найти конкретный пример, где кто-то это сделал. Согласно [docs] (https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts), вы можете использовать одиночный шаблон в списке, например 'ALLOWED_HOSTS = ['*'] ', (что не рекомендуется по соображениям безопасности), но я не видел ничего подобного вашему примеру. Я все еще склоняюсь к «да», но я буду не убежден, пока не увижу ссылку, в которой это явно указано. Это может быть глупый вопрос, но попробовали ли вы проверить, не вызовет ли он каких-либо ошибок в django? – Nez

+0

Было бы лучше разгрузить это на веб-сервер, который был сделан для эффективного управления этим. Или, может быть, даже настроить правила брандмауэра, чем выше в стеке трафик, тем лучше. – serg

+0

@Nez, да я. Посмотрите на мой ответ ниже. Я нашел решение этой проблемы. –

ответ

7

Я разместил билет на Django, однако я показал, что это может быть достигнуто, выполнив следующие действия

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

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

+0

Обновление создателей осени для Windows 10 нарушило этот метод для меня, так как 'gethostname()' вместо этого возвращал адрес коммутатора Ethernet Hyper-V. Вместо этого вы можете использовать 'ALLOWED_HOSTS = [gethostname(),] + gethostbyname_ex (gethostname()) [2]'. –

4

Нет, это не возможно в настоящее время. Согласно the docs, следующий синтаксис поддерживается:

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

Если посмотреть на реализацию метода validate_host, вы можете увидеть, что использование * в качестве шаблона не поддерживается.

+0

Ага, спасибо. Я не смотрел достаточно сильно, чтобы прочитать сам код. – Nez

2

Я нашел такое решение для диапазона фильтрации IP-адресов из:

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

Используя этот подход, мы можем фильтровать IP-адреса любых средств (F.E. с регулярным выражением).

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 

Спасибо за @Zorgmorduk

1

Вот быстрый и грязное решение.

allowed_hosts + = [ '172,17.% S.% S' % (I, J) для я в диапазоне (256) для J в диапазоне (256)]

Смежные вопросы