Django-当csrf_token没有重新提交到服务器时会发生什么



大家好

我在想当服务器端应用程序以HTML表单向浏览器提交csrf_token,而浏览器没有随帖子一起提交该表单时,会发生什么

因为我在想Django生成csrf_token,并将其与用户或会话关联起来,我不确定,以便在它返回时进行检查。然后我认为它会删除它,对吧?如果它没有回来呢?它会一直呆在那里等待会话结束还是这是一个导致漏洞的错误还是什么

对于示例,我想在对象的详细信息下为注释制作一个表格。但这不是必须要评论的。如果需要的话,你可以评论,而你不能这样做。所以我在这些细节下面放了一个这样的表格:

<div class="container">
<!-- Here is the object data -->
</div>
<div class="container comments">
<ul>
<li>
<form action="{% url 'ads:newcomment' %}" method="POST">
{% csrf_token %}
<input id="comment_txt" name="comment" type="text" value="Type a comment..." class="comment_txt"/>        
</form>
</li>
{% for comment in comments %}
<li class="comment">{{comment}}</li>
{% endfor %}
</ul>
</div>

CSRF令牌数据存在于请求会话或cookie中,具体取决于您的设置。

当您执行{% csrf_token %}时,相同的令牌会被放入表单上的一个隐藏字段中,以便将其张贴回服务器
服务器只会比较它与session/cookie中的内容是否匹配。

AJAX请求也做了类似的事情,但它不是包含在主体中,而是头的一部分。

如果使用CSRF_USE_SESSIONS = TrueCSRF_COOKIE_HTTPONLY = True,则无法通过JavaScript访问令牌,因此非常安全。

令牌本身是随机生成的,并在用户的整个会话中使用(即,如果他们注销并再次登录,将生成不同的令牌)。

因此,为了回答您的问题,如果未提交表单,则不会发生任何事情。只要用户登录,CSRF令牌将继续存在于会话/cookie中。

有关的更多详细信息,请参阅Django文档

最新更新