【问题标题】:Using GET in a Django Form在 Django 表单中使用 GET
【发布时间】:2016-02-04 11:24:39
【问题描述】:

我有一个关于 Django 表单和 GET 的问题

我有一个表格可以下载 CSV 格式的学生成绩。这些字段是名称和年份,所以我有一个 forms.py

StudentDownloadForm(forms.Form):
  name=forms.CharField()
  year = forms.CharField()

我想在 template.html 中使用这个表单和

context={'student_form' : StudentDownloadForm(),}

<form action ="" method="GET">
  {% csrf_token %}{{ student_form|crispy }}
<input type="submit" value="Query"/>
</form>

所以我的问题如下:

  • 如果我使用method="GET",则 csrf 令牌在 URL 中可见,这是一个安全问题
  • 然后我可以改用method="POST" 吗?
  • 或者,我可以删除表单中的 csrf 令牌吗?

【问题讨论】:

  • GET 不需要 CSRF 令牌。

标签: python django forms csrf


【解决方案1】:

根据 Django 文档 (Cross Site Request Forgery protection):

对于所有不使用 HTTP GET、HEAD、OPTIONS 的传入请求 或 TRACE,必须存在 CSRF cookie,并且“csrfmiddlewaretoken” 字段必须存在且正确。如果不是,用户将获得一个 403 错误。

还有:

它故意忽略 GET 请求(以及其他 RFC 2616 定义为“安全”)。这些请求不应该有任何 潜在危险的副作用,因此使用 GET 进行 CSRF 攻击 请求应该是无害的。 RFC 2616 将 POST、PUT 和 DELETE 定义为 “不安全”,并且所有其他方法都被认为是不安全的,最大 保护。

所以,对于 GET 请求,您可以省略 CSRF 令牌

【讨论】:

猜你喜欢
  • 2016-03-23
  • 1970-01-01
  • 1970-01-01
  • 2014-06-20
  • 2011-12-09
  • 1970-01-01
  • 2014-02-22
  • 1970-01-01
  • 2015-12-07
相关资源
最近更新 更多