返回

拒绝96!Chrome Cookie禁用后,利用 Go 实现“携带Cookie”解决方案及分享

前端

Chrome Cookies 的前世今生:适应不断变化的网络环境

在 Web 发展的浩瀚海洋中,cookies 始终是至关重要的组成部分,它们为用户身份验证、会话管理和跟踪提供了必要的功能。然而,随着技术和安全威胁的不断演变,cookies 也面临着新的挑战。

Chrome 96:一场 Cookie 革命

2022 年 7 月,Google 发布了备受期待的 Chrome 96 浏览器,其中包含了一系列影响 cookies 处理方式的重要更新。最引人注目的变化之一是默认禁用第三方 cookies,目的是保护用户免受跨站请求伪造 (CSRF) 和跨站脚本 (XSS) 攻击。

了解 SameSite Cookie

为了应对禁用第三方 cookies 的新现实,谷歌引入了 SameSite cookies。这是一种特殊类型的 cookie,可以限制其在不同网站之间的共享。SameSite cookies 有三种类型:

  • Lax: 允许在同一网站的页面之间共享 cookies,但在跨域请求中不会发送 cookies。
  • Strict: 只允许在同一网站的页面之间共享 cookies。
  • None: 允许在任何网站的请求中共享 cookies。

CORS 与 SameSite Cookie 的交互

跨域资源共享 (CORS) 是一种机制,允许浏览器向不同的域发送 HTTP 请求。CORS 请求包含一个特殊的 HTTP 头,称为 Origin 头,它指定请求的来源。服务器收到请求后,会检查 Origin 头并决定是否允许请求携带 cookies。

绕过 SameSite Cookie 限制的方法

虽然 Chrome 96 默认情况下禁用了第三方 cookies,但仍有办法在不同域之间共享信息。以下是一些方法:

  • 使用 SameSite Cookie 的 Lax 设置: 允许在同一网站的页面之间共享 cookies,但跨域请求时不发送 cookies。
  • 使用 CORS 预检请求: 确定服务器是否允许浏览器发送 CORS 请求的特殊类型。

Go 语言解决方案:一个实际示例

为了帮助您轻松适应 Chrome 96 的变化,我们提供了一个用 Go 语言实现的完整解决方案:

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        // 设置 SameSite 属性为 "Lax" 以允许带有 cookies 的跨域请求。
        http.SetCookie(w, &http.Cookie{
            Name:  "session",
            Value: "abc123",
            Path:  "/",
            SameSite: http.SameSiteLaxMode,
        })

        // 设置 CORS 标头以允许跨域请求。
        w.Header().Set("Access-Control-Allow-Origin", "*")
        w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")
        w.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization")

        fmt.Fprintf(w, "Hello, World!")
    })

    http.ListenAndServe(":8080", nil)
}

总结:适应和创新

随着 Chrome 96 的推出,cookies 的使用发生了重大变化。通过了解 SameSite cookies、CORS 的交互以及可用的变通方法,Web 开发人员可以适应不断变化的网络环境,同时确保用户数据的安全。

常见问题解答

1. 禁用第三方 cookies 会对我的网站产生什么影响?
禁用第三方 cookies可能会影响依赖它们进行身份验证或用户跟踪的网站。

2. 如何在使用 SameSite cookies 时确保用户体验?
SameSite cookies 的 Lax 设置是一个不错的选择,它允许在同一网站的页面之间共享 cookies,同时保护用户免受跨域攻击。

3. 什么时候应该使用 CORS 预检请求?
当需要发送自定义 HTTP 标头的跨域请求时,应使用 CORS 预检请求。

4. Go 语言解决方案中代码片段的作用是什么?
代码片段演示了如何使用 Go 语言设置 SameSite cookie 和 CORS 标头,以在 Chrome 96 中携带 cookies。

5. 如何确保我的网站与 Chrome 96 兼容?
通过实施 SameSite cookies、CORS 标头并测试您的网站,确保其在 Chrome 96 中正常运行。