Django REST api 调用和 allowed_hosts

Django REST api calls and allowed_hosts

我正在尝试在 Django 中实现 RESTful API 这样任何 ip 都可以查询端点。但是,如果我设置 ALLOWED_HOSTS = ['*'],我担心 header 攻击。

我阅读了对 的回答,其中建议应响应 api 调用,而不是由服务器响应。

我不完全理解他们的意思或如何实施它,正在寻求建议。

最终,我想知道如何进行 api 调用,因为它不在 ALLOWED_HOSTS 中,所以不会被 django 阻止?

ALLOWED_HOSTS 与您的 API 调用没有任何关系。这是您的服务器应该响应的主机名列表,而不是

您遇到的问题与 ALLOWED_HOSTS 无关,而与 CSRF 保护有关。你有两个选择。您可以使用

在页面上禁用跨站点请求伪造保护
@method_decorator(csrf_exempt, name=dispatch)

在 django >= 1.9 的 class 之上,或者在 django 的早期版本中装饰 dispatch 方法,例如:

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

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

ALLOWED_HOSTSstringsregular expressions 的列表,表示此 Django 站点可以提供的 host/domain 名称。 您需要使用 Token、JWT 或任何其他身份验证方法来阻止您的 API。