2017-09-09 41 views
0

我试图在Django中实现RESTful API,以便任何IP都可以查询端点。不过,如果我设置ALLOWED_HOSTS = ['*'],我担心标题攻击。Django REST API调用和allowed_hosts

我看到Why is Django throwing error "DisallowedHost at /"?的答案,这表明api调用应该被响应,而不是由服务器响应。

我不完全理解他们的意思或如何实现它,并且正在寻找建议。

最终,我想知道如何才能使api调用不被django阻止,因为它不在ALLOWED_HOSTS中?

+0

'ALLOWED_HOSTS'是Django开发服务器的设置。您不要在开发服务器上运行生产API。改为使用正确的WSGI设置。 –

回答

0

您遇到的问题与ALLOWED_HOSTS无关,并且与CSRF保护有关。你有两个选择。您可以通过使用禁用页面上的跨站请求伪造保护要么

@method_decorator(csrf_exempt, name=dispatch) 

你在Django> = 1.9,或装饰在以前版本的Django的,像这样的调度方法类以上:

class myView(View): 
    @method_decorator(csrf_exempt) 
    def dispatch(self, request, *args, **kwargs): 
     return super(myView, self).dispatch(request, *args, **kwargs) 

如果您担心谁可以获取访问权限,则需要查看其他身份验证方法,例如基于令牌的身份验证,以便只有通过正确令牌的网站才能访问。

+0

当我蜷缩服务器时,它经过nginx并被路由到Django,它特别说明它需要被添加到允许的主机中,我只是使用apiview作为我的类,并不确定修饰者应该修复这个问题。可以尝试并回复你我正在使用Django身份验证令牌 – jgoods

+0

您是否尝试添加127.0.0.1或您使用的主机名来访问它 –

+0

虽然我从未见过,但您可能需要这两者 –

0

ALLOWED_HOSTS与您的API调用无关。这是您的服务器应回应的主机名列表,而不是

+0

你的回答是令人困惑的部分。回应vs“我是在意义之下,而不是实现,或者是一个vs另一个。我的道歉呼吁是通过Django restframework和auth令牌设置的。如果我在端点上蜷缩服务器,它会给我这个允许的网站错误。 – jgoods

0

ALLOWED_HOSTSstringsregular expressions表示,这Django的网站可以成为主机/域名列表。 您需要使用Token,JWT或任何其他身份验证方法来阻止您的API。

+0

我正在使用Django令牌验证,但是当我使用卷曲apiview时,它会被拒绝,因为它不是被允许的主机。这可能是因为命令是通过nginx路由的? – jgoods