Django的:CSRF中间件和混合POST / GET形式

问题描述 投票:0回答:1

我想箱子形式蒙山两个提交按钮:Save,让我们说,和Back to edit。 (形式是为当前正在编辑的东西预览/确认视图)。

由于显而易见的原因,Save按钮与价值formaction和其他按钮post一个get属性。对于post行动的工作,我在表单中通常csrfmiddlewaretoken

到目前为止,一切运作良好,唯一的问题是,csrfmiddlewaretoken值现在包括在GET请求(这似乎气馁出于安全原因)。

目前,我补充一点,查找所有提交按钮与get行动,并增加了一个单击处理程序,可以消除该领域的csrfmiddlewaretoken提交之前的一些自定义的javascript。这似乎是一个相当奇怪的和roundabaout的方式来做事。

问:有没有更好/更标准/较稳定的处理这种情况呢?

编辑:为什么我要使用获得某种形式的行动,要求呢?

嗯,我想坚持到规则中使用POST请求(只),对改变数据(在这种情况下,一个重定向响应)的请求。

举个例子,认为一个表单,用户可以编辑(“网页A”)的某些字段,然后按“预览”(一个GET操作),这将导致这里呈现相同的形式“网页B”的,但只读与由系统生成的预览图像。如果用户是幸福的,他们可以按“保存”(一个POST操作),这将真正保存的数据,也可以按“返回”(一个GET动作,类似于浏览器的后退按钮),继续编辑数据。我不会乐意实现这个“后退”操作POST,因为这打乱了实际浏览器后退按钮等互动

在这个简单的例子,一个当然可以要求用户使用浏览器的后退按钮而不是一个表单按钮,或(可能?)使用JavaScript来模拟浏览器的后退。但稍微复杂一点的流量控制一个简单的“回”是不是一种选择。

django django-csrf
1个回答
1
投票

问题是,你从包含您的GET令牌形式发送CSRF请求。我宁愿建议不是PUT要求GET请求。该CSRF令牌值未在URL暴露,因为PUT请求允许通过身体的价值。

关于HTTP PUT method

© www.soinside.com 2019 - 2024. All rights reserved.