django ALLOWED_HOSTS无效

时间:2016-02-24 11:08:48

标签: python django apache

我的settings.py文件包含:

default.ctp

但是,我能够发出这样的卷曲请求:DEBUG = False ALLOWED_HOSTS = [u'mydomainxxx.com'] 并得到回复。

我希望使用curl -X GET https://mydomainxxx.com/api/ -H 'Authorization: Token some token'会阻止像curl这样的命令从我的API获得响应。 这是正常行为吗?

2 个答案:

答案 0 :(得分:5)

您将ALLOWED_HOSTS设置与其他内容混淆。它表示服务器将侦听的主机名;不是连接主机的主机名。没有内置的方法来阻止它,但您可以轻松编写中间件来检查连接的主机名。

您当前的设置会阻止此人收到回复:

curl -X GET http://another_domainxxx.com/api/ -H 'Authorization: Token some token' 

即使mydomainxxx.comanother_domainxxx.com都将解析为相同的IP地址。

答案 1 :(得分:2)

对于想要过滤referer url而不是ip地址的人,我们可以使用以下中间件:

from django.conf import settings
from django import http

class AllowHostsMiddleware(object):

    def process_request(self, request):
        referer_url = request.META.get('HTTP_REFERER','')
        if referer_url.startswith(settings.ALLOWED_REFERER_URL):
            return None
        return http.HttpResponseForbidden('<h1>Forbidden</h1>')