我有关于Django Forms和GET的问题
我有一张表格可以下载CSV格式的学生成绩。字段是名称和年份,因此我有 forms.py
StudentDownloadForm(forms.Form):
name=forms.CharField()
year = forms.CharField()
我想在 template.html with
中使用此表单 context={'student_form' : StudentDownloadForm(),}
<form action ="" method="GET">
{% csrf_token %}{{ student_form|crispy }}
<input type="submit" value="Query"/>
</form>
所以我的问题如下:
method="GET"
,那么网址中会显示csrf令牌,这是一个安全问题method="POST"
代替吗?答案 0 :(得分:2)
根据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令牌