Django-CSRF和POST一个Html表单

时间:2017-07-03 18:34:52

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

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

  

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

(我知道Django的行为是合适的,因为我在表单内部没有CSRF令牌标记/字段。顺便说一句,DB中自定义Html表单字符串的原因是它们可以由实际用户生成)< / p>

我可以实施的解决方案是TheBronx对问题​​SO post的回答。这似乎是一个只做

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

相反,请考虑允许他们从一系列字段中进行选择,并自己构建表单。