【问题标题】:Django: Is this a viable alternative method for including CSRF tokens in template forms?Django:这是在模板表单中包含 CSRF 令牌的可行替代方法吗?
【发布时间】:2014-10-24 02:21:33
【问题描述】:

我通常以Django documentation指定的格式将CSRF令牌添加到模板中的表单:

<form action="" method="post">{{ csrf_token }}
... 
</form>

但是,我已经看到了作者包含 CSRF 令牌的 sn-ps 代码,如下所示:

<form action="" method="post">
    <div style="display:none">
        <input type="hidden" value="{{ csrf_token }}" name="csrfmiddlewaretoken">
    </div>
...
</form>

使用后者代替前者有什么好处吗?

提前致谢。

【问题讨论】:

  • 后一个和前一个完全一样。后来,当我需要通过一些动态输入从 java 脚本中给出一些明确的 AJAX 请求时,我使用了它。除此之外,他们没有其他好处。

标签: python django security csrf


【解决方案1】:

它们都产生相同的结果。位于here 的官方文档有在form 标签之外使用csrf_token 的示例。行为上的差异与 csrf_token 变量的放置位置有关 - 如果在 form 标签之外,它知道为您构建表单 - 如果放在 form 标签内,它知道只获取实际值最终结果是一样的。

有多种方法可以产生相同结果的原因之一是添加了对第 3 方模板的支持。我认为就性能而言,您不会看到太大的差异(尽管在标签内使用 csrf_token 的变体可能会返回更快,因为 Django 不必为您动态生成整个表单,因为您已经构建了它) .

【讨论】:

    猜你喜欢
    • 2016-12-06
    • 2013-02-25
    • 1970-01-01
    • 2022-07-12
    • 1970-01-01
    • 2011-04-15
    • 2023-02-15
    • 2011-12-11
    • 2014-10-16
    相关资源
    最近更新 更多