【问题标题】:Django- CSRF and POSTing an Html formDjango- CSRF 和 POST 一个 Html 表单
【发布时间】:2017-07-03 18:34:52
【问题描述】:

在 Django 视图中,我将一个 Html 表单(带有一些 Html 的实际字符串,来自我的数据库)放入一个带有标签的 Html 模板:{{ injected_form|safe }}。这成功地显示了表单,但我在发布它时遇到了问题:

禁止 (...) CSRF 令牌丢失或不正确。

(我知道这是适当的 Django 行为,因为我在表单本身没有 CSRF 令牌标签/字段。顺便说一句,数据库中自定义 Html 表单字符串的原因是它们可以由实际用户生成)

我可以实施的解决方案是 TheBronx 对问题 here 的回答。这似乎是一种情况,只是在做

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

不可能!这个问题有解决方案吗?

我已经弄清楚如何在没有相关 Django 模型的情况下处理/接收 POST,但我没有预见到提交它们的 CSRF 问题:( 任何帮助将不胜感激

【问题讨论】:

  • 对不起,我不明白。您在表单中使用 csrf 令牌,但仍然收到 csrf 令牌丢失错误?

标签: html django django-templates django-views django-csrf


【解决方案1】:

我不确定为什么这是不可能的。当然,存储在数据库中的表单本身不需要包含&lt;form&gt; 标签,因此您可以轻松地自己使用这些标签并添加 CSRF 令牌。无论如何,这似乎更安全,因为您应该自己确保表单 POST 的目的地。

但我必须说,这整个方法似乎是错误的。允许用户将原始 HTML 添加到您的数据库并将其直接输出(未转义)到模板中永远不会真正安全。并且允许他们在 HTML 中指定表单字段似乎是各种注入攻击的秘诀。

请考虑允许他们从一系列字段中进行选择,然后自己根据这些字段构建表单。

【讨论】:

  • 我让它与我的模板一起工作,在
    之间放置令牌并注入 Html 字段。顺便说一句,这些 Html 字符串是由用户使用我正在使用的构建 Django 应用程序的表单生成的(以及我的一个应用程序从中“提取”它们),抱歉不清楚。非常感谢您的建议和警告!
猜你喜欢
  • 2017-07-19
  • 2017-10-13
  • 2012-05-20
  • 2019-03-02
  • 2015-06-21
  • 2015-05-16
  • 2018-11-06
  • 2014-04-26
  • 2011-09-05
相关资源
最近更新 更多