首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我是否可以依赖CSRF cookie来检查用户是否在客户端进行了身份验证?

我是否可以依赖CSRF cookie来检查用户是否在客户端进行了身份验证?
EN

Security用户
提问于 2019-07-11 13:05:56
回答 3查看 426关注 0票数 0

我有一个在example.com上运行的网站。该网站对位于api.example.com的后端API进行AJAX调用。

我采用了双重提交验证策略。

后端有受保护的端点,用于检查每个请求的JWT令牌。JWT令牌存储在httpOnly cookie中。它还包含CSRF令牌。

除了JWT cookie之外,我还发送了一个cookie,它不是httpOnly。客户端发出的每个请求都必须在一个特殊的标题中包含此cookie的值。

到目前为止还不错,但是,我想确保客户端尽其所能防止用户发出无意义的未经身份验证的请求。因此,在我的React应用程序中,我声明了几条私有路由,它们检查用户是否登录,如果没有,用户将被重定向到登录页面。

我检查用户是否经过身份验证的方式是检查用户是否拥有CSRF cookie。如果这样做,则允许它们导航到受保护的页面。该页面上的所有后续请求仍然在后端为JWT和CSRF令牌进行验证。

我的问题是,这是否是在客户端验证客户端身份的有效方法?

此外,我是否应该为这两个cookie将sameSite cookie选项设置为True

编辑

我刚刚想到的一件事是,最好在后端创建一个简单的端点,用于检查用户是否已登录。因此,客户端可以向这个端点提交一个请求,并验证cookie中的令牌是否仍然有效,而不是仅仅检查cookie。

EN

回答 3

Security用户

发布于 2021-12-27 21:52:03

我希望确保客户端在其能力范围内尽一切努力防止用户发出无意义的未经身份验证的请求。

..。但是为什么呢?您根本无法阻止它;客户端100%在用户的控制之下。如果有人想提出“毫无意义的未经认证的请求”,他们就会这么做,而且你也可以这么做。你为什么在乎?身份验证是服务器100%的责任。只需返回一个错误和/或重定向(取决于它是页面请求还是API请求)。

这是一种有效的方法来检查客户端是否经过了客户端的身份验证?

无效类别;不存在这样的东西。客户端不知道,也不知道,除非通过发出请求和检查响应,否则服务器是否认为它是经过身份验证的。这就像问“<字面上的anything>是一种有效的方法来检查这张彩票是否是中奖号码吗?”不是

要明确的是,尝试这样做并不不安全。如果您的客户端对此检查的结果作出任何安全决定,这是一个安全漏洞,但根本原因是“客户端做出任何安全决定”,请停止。别干那事。如果这只是,对用户友好的行为.那么,如何最好地实现不属于这个站点的东西,但这类东西并不是不安全的。

稍微有点离题,但是:

客户端发出的每个请求都必须在一个特殊的标题中包含此cookie的值。

双提交cookie是一种相对薄弱的CSRF预防策略。总比什么都没有好。如果您还没有对CORS策略进行完全不安全的操作,那么“需要一个特殊的标题”这一步骤也是完全多余的。任何试图发送自定义标头的第三方站点都会在飞行前触发CORS;如果您的站点不允许它(它也不应该允许,或者您可能有一个单独的漏洞),那么浏览器根本不会发送实际请求(包含cookie,包括访问令牌)。

票数 2
EN

Security用户

发布于 2019-07-11 13:39:58

与其说这是一个安全问题,不如说这是一个web应用程序架构问题。

是否有一个JWT令牌不足以考虑从客户端角度记录的用户?

我假设用户在获得令牌之前进行了身份验证,大概是从成功的登录响应中获得的。

当令牌过期时,返回未经授权的响应,在每个ajax响应(https://github.com/axios/axios#interceptors)上查找此响应,并将用户重定向到登录页面。

票数 0
EN

Security用户

发布于 2020-04-06 14:19:23

与其检查用户是否有资格对某个资源(API)执行请求,不如在资源端(可能已经有)实现安全检查。在这种情况下,API将验证所有cookie,如果不是,资源将对不安全的请求做出反应。

该解决方案体系结构更易于实现和理解。如果您希望在此状态下以某种方式调整UI,那么在客户端检查用户身份验证是否有用,但是对于这一点,我将使用与CSRF cookie不同的cookie。

SameSite cookie设置为"true“是不可能的。您只能设置“无”、“密宗”或“松懈”。如果cookie将用于“跨站点”用例,则此设置取决于此。

票数 0
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/213332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档