Django允许的主机不工作

2024-09-30 01:35:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我的设置.py文件包含:

DEBUG = False
ALLOWED_HOSTS = [u'mydomainxxx.com']

无论如何,我可以像这样启动一个curl请求:curl -X GET https://mydomainxxx.com/api/ -H 'Authorization: Token some token'并得到响应。在

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


Tags: 文件pyhttpsdebugcomtokenapifalse
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>')

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

当前设置将阻止此操作获得响应:

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

即使mydomainxxx.com和{}将解析为同一个IP地址。在

相关问题 更多 >

    热门问题