Python django允许的\u主机不工作

Python django允许的\u主机不工作,python,django,apache,Python,Django,Apache,My settings.py文件包含: DEBUG = False ALLOWED_HOSTS = [u'mydomainxxx.com'] 但是,我可以发出这样的curl请求:curl-xgethttps://mydomainxxx.com/api/ -H'授权:标记一些标记',我得到响应 我希望使用ALLOWED\u HOSTS可以防止像curl这样的命令从我的API获得响应。 这是正常行为吗?您将设置与其他内容混淆。它表示服务器将侦听的主机名;不是连接主机的主机名。没有内置的方法来阻止它

My settings.py文件包含:

DEBUG = False
ALLOWED_HOSTS = [u'mydomainxxx.com']
但是,我可以发出这样的curl请求:
curl-xgethttps://mydomainxxx.com/api/ -H'授权:标记一些标记'
,我得到响应

我希望使用
ALLOWED\u HOSTS
可以防止像curl这样的命令从我的API获得响应。 这是正常行为吗?

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

您当前的设置将阻止此响应:

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

即使
mydomainxxx.com
另一个\u domainxxx.com
都将解析为相同的IP地址。

仅适用于希望根据引用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>')
来自django.conf导入设置的

从django导入http
类AllowHostsMiddleware(对象):
def过程_请求(自我,请求):
referer\u url=request.META.get('HTTP\u referer','')
如果referer\u url.startswith(设置.允许的\u referer\u url):
一无所获
返回http.HttpResponseForbidden('禁止')

您已打开调试?如上所述,这是错误的。谢谢Selcuk,您能告诉我一个好的资源,我可以在那里编写这个中间件吗?@SaurabhVerma如果您想通过IP地址进行限制,您可以尝试或修改它,以根据主机名进行限制。谢谢,我也添加了我的答案,这对我很有用。