【问题标题】:Is generating CSRF token on the front-end a bad idea?在前端生成 CSRF 令牌是个坏主意吗?
【发布时间】:2021-11-30 05:47:00
【问题描述】:

在 Django 世界中,CSRF 令牌的生成方式不涉及任何只有服务器知道的信息。完全可以在 javascript 中生成一个有效的 CSRF 令牌 - Django 会很乐意接受它。

特别是,可以有一段 javascript 生成有效的 CSRF 令牌并将其设置为 cookie(由于相同的来源,它可以正常工作)。

这样做是否有任何与安全相关的缺点?我唯一能想到的是这样的 cookie 不能设置 http-only 标志(原因很明显)。

【问题讨论】:

    标签: django csrf


    【解决方案1】:

    简短的回答是

    CSRF 是一种限制 CSRF 攻击的解决方案。因此,在服务器中,会生成(并签名)一个代码来检查用户是否使用内置的 js 代码。例如,用户可以在浏览器控制台中调用一个没有CSRF保护的函数,或者使用浏览器扩展程序,或者在没有任何浏览器的情况下使用curl,在这种情况下,你无法理解用户是否知道这个函数调用!

    另一方面,您想创建一个新的 CSRFTOKEN 并使用 ajax 将其发送到服务器,而该服务无法使用 CSRF 进行保护。所以黑客可以使用这个 ajax 调用来伪造 CSRF!黑客可以在你的 js 库中找到你的 CSRF maker 代码。

    对于您的想法,您可以使用一些用户信息并将其保存在会话信息中,例如 use-agent、client-IP 和 ...

    【讨论】:

    • "黑客可以在你的 js 库中找到你的 CSRF maker 代码。" - 这对于 django 代码也是如此 - 任何人都可以阅读它(因为它是开源的)并生成一个有效的 CSRF 令牌(如果你修改了代码,可以使用任何语言)。
    • 为创建中的每个项目生成由安全代码制成的 CSRF。
    猜你喜欢
    • 2020-11-15
    • 2010-12-20
    • 1970-01-01
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 2010-09-28
    • 2013-04-25
    • 1970-01-01
    相关资源
    最近更新 更多