【问题标题】:how to set csrf token for allowed list of websites如何为允许的网站列表设置 csrf 令牌
【发布时间】:2014-12-10 07:23:01
【问题描述】:

我有两台服务器,域名分别为“example.com”和“demo.com”。我在“demo.com”中完成了我所有的项目。但我也想在“example.com”主页中注册“demo.com”的注册页面,用户在 POST 数据后重定向到“demo.com”服务器,无论他/她提供正确还是错误的信息。

我收到 csrf 错误。当我给予豁免 csrf 令牌时。它工作得很好,这是我不想要的。有人可以在不使用 csrf 豁免的情况下帮助我吗?或 csrf 仅适用于两个服务器,即“example.com”和“demo.com”(允许的主机列表)

(对不起我的英语)

【问题讨论】:

  • 这……不是 CSRF 的工作方式。

标签: django webserver csrf django-csrf csrf-protection


【解决方案1】:

这是不可能的,正如@Daniel 在 cmets 中提到的那样,这不是它的工作原理。每次用户访问页面时,服务器都会生成 CSRF 令牌。而且每次都不一样。当用户提交表单时,服务器会验证它是否与它发送的相同或不同。

您还应该首先了解 CSRF 保护存在的原因。例如,假设stackoverflow.com/avi/delete 上的 POST 请求会删除我在 SO 上的个人资料。

现在,如果我访问一个恶意网站,它可能有一个看起来很无辜的表单,询问我的姓名和电子邮件:

<form action="http://stackoverflow.com/avi/delete" method="post">
    Your name: <input type="text"><br>
    Your email: <input type="text"><br>
    <input type="submit">
</form>

如果我登录 SO 并且我的会话有效,同时我从恶意网站提交上述内容,我的帐户将被删除!因为浏览器会发送 SO 相关的 cookie,SO 服务器可以识别它们。但是SO的好人很聪明。 SO 上的页面,有账户删除表格,还包括一个 CSRF 令牌。每当用户访问该页面时,都会生成此令牌。服务器对其进行验证,如果相同,则将删除帐户,否则将忽略该请求。

现在,恶意网站不可能知道 SO 生成的 CSRF 令牌。因此,即使我提交了表单,我的帐户在 SO 上仍然是安全的。

现在,在您的情况下,您本质上想要的是从服务器 A 生成的令牌,并且您希望由服务器 B 验证。现在,您可以实际上使用相同的令牌每次,以便服务器 B 可以验证它。但这违背了 CSRF 代币的全部目的。

【讨论】:

    猜你喜欢
    • 2011-05-14
    • 2022-01-04
    • 2020-05-11
    • 2017-06-25
    • 2021-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    相关资源
    最近更新 更多