我的大部分 GET 请求都是由 Angular 触发的,这使得在 header 中设置 CSRF Token 变得很容易。这对于 POST 请求已经是开箱即用的了,但是我想知道我是否也可以对 GET 请求使用 CSRF 保护。
我最初的直觉是@csrf_protect
在 View 的 get 方法之前添加,例如:
class ProjectView(View):
@csrf_protect
def get(self, request, *args, **kwargs):
...
但是,这会产生错误:
AttributeError at /project
'ProjectView' object has no attribute 'COOKIES'
File "c:\Apps\msysgit\simpletask\lib\site-packages\django\middleware\csrf.py" in process_view
95. request.COOKIES[settings.CSRF_COOKIE_NAME])
所以我猜想POST请求提供了一些GET请求没有提供的东西。有一个更好的方法吗?
此外,在任何人提到所有敏感信息都应该通过 POST 请求提取之前(正如我最近几次看到的那样),我尝试坚持使用 GET 的原因是我正在尝试根据 RESTful 指南构建,这意味着 GET 请求用于提取数据,POST 用于新记录,PUT 用于更新,DELETE 用于数据删除。
编辑:
由于似乎有一种情绪我不应该尝试上述方法,虽然我现在有点同意,但我试图阻止的漏洞在以下 3 个链接中讨论: