Python Django REST api调用和允许的\u主机

Python Django REST api调用和允许的\u主机,python,django,rest,http-headers,api-design,Python,Django,Rest,Http Headers,Api Design,我试图在Django中实现一个RESTful API,这样任何ip都可以查询端点。但是,如果我要设置允许的\u HOSTS=['*'],我会担心头攻击 我读到一个答案,其中建议应该响应api调用,而不是由服务器响应 我不完全理解他们的意思,也不知道如何实施,我正在寻求建议 最后,我想知道如何进行api调用,而该调用不会被django阻止,因为它不在允许的\u主机中?允许的\u主机与您的api调用没有任何关系。这是服务器应该响应的主机名列表,而不是允许的主机名。主机与您的API调用没有任何关系。这

我试图在Django中实现一个RESTful API,这样任何ip都可以查询端点。但是,如果我要设置
允许的\u HOSTS=['*']
,我会担心头攻击

我读到一个答案,其中建议应该响应api调用,而不是由服务器响应

我不完全理解他们的意思,也不知道如何实施,我正在寻求建议


最后,我想知道如何进行api调用,而该调用不会被django阻止,因为它不在允许的\u主机中?

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

您遇到的问题与允许的\u主机无关,与CSRF保护有关。你有两个选择。您可以使用以下任一方法禁用页面上的跨站点请求伪造保护:

@method_decorator(csrf_exempt, name=dispatch)
在django>=1.9中的类之上,或在django的早期版本中修饰dispatch方法,例如:

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

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

您遇到的问题与允许的\u主机无关,而与CSRF保护有关。你有两个选择。您可以使用以下任一方法禁用页面上的跨站点请求伪造保护:

@method_decorator(csrf_exempt, name=dispatch)
在django>=1.9中的类之上,或在django的早期版本中修饰dispatch方法,例如:

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

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

允许的\u主机
是表示此Django站点可以服务的主机/域名的
字符串列表
正则表达式

您需要使用令牌、JWT或任何其他身份验证方法来阻止API。

允许的\u主机
是表示此Django站点可以服务的主机/域名的
字符串列表
正则表达式。

您需要使用令牌、JWT或任何其他身份验证方法来阻止API。

ALLOWED\u HOSTS
是Django开发服务器的设置。您没有在开发服务器上运行生产API。请使用正确的WSGI设置。
ALLOWED\u HOSTS
是Django开发服务器的设置。您没有在开发服务器上运行生产API。我使用的是Django令牌auth,但是当我在apiview中使用curl时,它会被拒绝,因为它不是一个允许的主机。这可能是因为命令是通过nginx路由的?我使用的是Django token auth,但当我在apiview中使用curl时,它由于不是允许的主机而被拒绝。这可能是因为命令是通过nginx路由的?当我卷曲服务器时,它通过nginx路由到Django。它明确表示需要将其添加到允许的主机。我只是在我的类中使用apiview,不确定装饰师是否应该解决这个问题。我可以试着给你回电话。我目前正在使用Django auth Token。您是否尝试添加127.0.0.1或用于访问它的主机名。虽然我从未见过这两种情况,但您可能都需要。我必须添加执行curl命令的设备的IP地址,这违背了开放api的目的。但仍然不是一个解决方案。当我卷曲服务器时,它通过nginx并被路由到Django。它明确表示需要将其添加到允许的主机。我只是在我的类中使用apiview,不确定装饰师是否应该解决这个问题。我可以试着给你回电话。我目前正在使用Django auth Token。您是否尝试添加127.0.0.1或用于访问它的主机名。虽然我从未见过这两种情况,但您可能都需要。我必须添加执行curl命令的设备的IP地址,这违背了开放api的目的。但仍然不是解决方案。您的回答是令人困惑的部分。将vs响应为“I”的意思,但不是实现或导致彼此冲突的原因。我的道歉调用是通过Django restframework和auth token设置的。如果我在端点处卷曲服务器,它会给我这个允许的站点错误。您的响应是令人困惑的部分。将vs响应为“I”的意思,但不是实现或是什么导致了一对另一。我的道歉电话是通过Django restframework和身份验证令牌设置的。如果我在端点处卷曲服务器,它会给我这个允许的站点错误。