2

我创建了一个 django 项目并设置了 urls.py、查看模型等。除了一件事外,一切都运行良好。

urls.py 片段:

urlpatterns = patterns('',
(r'^$', main_page),
(r'^sendcall/$', sendcall),
(r'^dial_ag/$', dial_ag),

因此,我的 '/'、'/sendcall/' 工作正常,因为它们从我的模板表单获取 POST 请求,并且 csrf_token 存在,所以根本没有问题。

现在这个 /dial_ag/ url 永远不会从我的应用程序中调用。此 url 将由第三方 API 调用(我在他们的应用程序中配置了此 url,因此他们将向此 url 发送 POST 请求)。我发现在这种情况下,views.py 中的视图dial_ag必须装饰器@csrf_exempt下使用,否则第三方将始终得到 403 禁止响应,因为我猜 django 甚至希望在请求中包含 csrf_token?

所以现在我让它工作了,但我在 stackoverflow 上阅读了关于在 @csrf_exempt 之后使用 @requires_csrf_token 来处理安全漏洞的信息——一种在内部以某种方式传递 csrf_token 并保护视图的方法:

@csrf_exempt
@requires_csrf_token
def my_protected_unprotected_view():
    ...

这就是我卡住的地方。我无法理解这个概念或找到一个很好的文档(是的 django 文档在这里没有帮助。)关于如何实现这个。我如何从urls.py本身将令牌传递给视图,这样我就不必只使用@csrf_exempt。第三方应用程序与项目没有任何关系,除了将 REQUEST 发送到我不应该有令牌但使用@csrf_token的 url是处理这种情况的最佳方法吗?

4

1 回答 1

0
  • 如果您的第三方应用程序不修改您的数据,您可以更喜欢 GET 请求。
  • 您可以使用@csrf_exempt,因为第三方应用程序无法在您的页面上运行。但是您的代码中应该有适当的身份验证和授权机制。
于 2013-09-19T04:40:38.053 回答