首页 > 解决方案 > 在前端生成 CSRF 令牌是个坏主意吗?

问题描述

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

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

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

标签: djangocsrf

解决方案


简短的回答是

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

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

对于您的想法,您可以使用一些用户信息并将其保存在会话信息中,例如使用代理、客户端 IP 和...


推荐阅读