我的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获得响应。
这是正常行为吗?
答案 0 :(得分:5)
您将ALLOWED_HOSTS
设置与其他内容混淆。它表示服务器将侦听的主机名;不是连接主机的主机名。没有内置的方法来阻止它,但您可以轻松编写中间件来检查连接的主机名。
您当前的设置会阻止此人收到回复:
curl -X GET http://another_domainxxx.com/api/ -H 'Authorization: Token some token'
即使mydomainxxx.com
和another_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>')