如果我们将 HttpCookie.HttpOnly 设置为 true,客户端会发生变化

Posted

技术标签:

【中文标题】如果我们将 HttpCookie.HttpOnly 设置为 true,客户端会发生变化【英文标题】:Changes in Client side if we are Setting HttpCookie.HttpOnly as true 【发布时间】:2022-01-18 12:43:27 【问题描述】:

在 .net Core 中,我们使用 IAntiforgery 配置防伪功能以及 [ValidateAntiForgeryToken] 或 AutoValidateAntiforgeryToken 来防止跨站点请求伪造 (XSRF/CSRF) 攻击。

在我们使用的中间件中配置防伪功能

var antiforgery = app.Services.GetRequiredService<IAntiforgery>();

app.Use((context, next) =>

    var requestPath = context.Request.Path.Value;

    if (string.Equals(requestPath, "/", StringComparison.OrdinalIgnoreCase)
        || string.Equals(requestPath, "/index.html", StringComparison.OrdinalIgnoreCase))
    
        var tokenSet = antiforgery.GetAndStoreTokens(context);
        context.Response.Cookies.Append("XSRF-TOKEN", tokenSet.RequestToken!,
            new CookieOptions  HttpOnly = false );
    

    return next(context);
);

Microsoft Doc Link

现在我的问题是如果我们设置 new CookieOptions HttpOnly = True ); 那么我们需要在服务器端和客户端做哪些改变

【问题讨论】:

【参考方案1】:

客户端的变化?实际上,绝对没有。

使用 HTTPOnly cookie 应该比手动提取和存储客户端 cookie/令牌更容易。 HttpOnly cookie 只是阻止 cookie 被客户端 javascript 拦截。只要您实际上并未尝试从请求中获取该 cookie(为什么会,它存储在 cookie 中!),那么它将自动与您的所有请求一起发送。

服务器端应该像往常一样工作。 HttpOnly 是客户端的变化

【讨论】:

这就是我的问题,主要是在 clinet 方面发生了什么变化?如果你能解释一下,这在内部是如何工作的 就像我说的; '只要您实际上并没有尝试从请求中获取该 cookie(为什么会,它存储在 cookie 中!),那么它将自动与您的所有请求一起发送。但是您出于某种原因对我投了反对票……没有看到您的客户端代码,我无法确切知道您在使用当前令牌做什么。我只能说,您可以在前端删除任何涉及手动检索令牌然后将其附加到未来请求的逻辑,因为从现在开始,浏览器将为您处理这一切。 马克我没有拒绝你,我不清楚你的回答为什么只是在评论中询问更多。无论如何感谢你的回答 即使我已将其标记为有用。

以上是关于如果我们将 HttpCookie.HttpOnly 设置为 true,客户端会发生变化的主要内容,如果未能解决你的问题,请参考以下文章