Python 避免使用csrf_令牌,并在@csrf_豁免后使用@requires_csrf_令牌

Python 避免使用csrf_令牌,并在@csrf_豁免后使用@requires_csrf_令牌,python,django,Python,Django,我已经创建了一个django项目,并设置了URL.py、视图模型等。除了一件事之外,所有的工作都很好 URL.py代码段: urlpatterns = patterns('', (r'^$', main_page), (r'^sendcall/$', sendcall), (r'^dial_ag/$', dial_ag), 因此,我的“/”、“/sendcall/”工作正常,因为他们从我的模板表单中获得POST请求,并且csrf_令牌存在,所以根本没有问题 现在,我的应用程序将永远不会调用此/

我已经创建了一个django项目,并设置了URL.py、视图模型等。除了一件事之外,所有的工作都很好

URL.py代码段:

urlpatterns = patterns('',
(r'^$', main_page),
(r'^sendcall/$', sendcall),
(r'^dial_ag/$', dial_ag),
因此,我的“/”、“/sendcall/”工作正常,因为他们从我的模板表单中获得POST请求,并且csrf_令牌存在,所以根本没有问题

现在,我的应用程序将永远不会调用此/dial_ag/url。此url将由第三方API调用(我在他们的应用程序中配置了此url,以便他们向此url发送POST请求)。我发现在这种情况下,views.py中的viewdial_ag必须在decorator@csrf_emption下使用,否则第三方总是会得到403禁止响应,因为我猜django甚至希望请求中有csrf_令牌

所以现在我让它工作了,但我在stackoverflow上读到了关于在@csrf\u豁免之后使用@requires\u csrf\u令牌来处理安全漏洞的内容,这是一种以某种方式在内部传递csrf\u令牌并保护视图的方法,如下所示:

@csrf_exempt
@requires_csrf_token
def my_protected_unprotected_view():
    ...
这就是我被困的地方。我无法理解这个概念,也找不到关于如何实现这个的好文档(是的,django文档在这里没有帮助)。如何从url.py本身将令牌传递给视图,这样我就不必只使用@csrf\u。第三方应用程序与project没有任何关系,只是向我的url发送请求。我的url不应该有令牌,但使用@csrf\u令牌是处理这种情况的最佳方法?

  • 如果你的第三方应用程序没有修改你的数据,你可以选择GET请求
  • 您可以使用@csrf_-emption,因为第三方应用程序无法在您的页面上运行。但是你应该 在代码中具有适当的身份验证和授权机制
感谢您的回复。“但您的代码中应该有适当的身份验证和授权机制。”是的,API确实在请求头中提供了签名,我可以在代码中验证该签名,以确认请求仅来自该第三方。不过我会避免收到请求。您是否有关于@requires\u csrf\u令牌的参考示例博客链接等?