在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问题:(任何帮助将不胜感激
答案 0 :(得分:1)
我不确定为什么不可能。当然,存储在数据库中的表单本身不需要包含<form>
标记,因此您可以自己轻松地使用这些标记并添加CSRF标记。无论如何,这似乎更安全,因为你应该自己确保表格POST的目的地。
但我必须说,这整个方法似乎都是错误的。允许用户将原始HTML添加到数据库并将其直接(未转义)输出到模板是绝对不安全的。允许他们在HTML中指定表单字段似乎是各种注入攻击的秘诀。
相反,请考虑允许他们从一系列字段中进行选择,并自己构建表单。