【发布时间】:2020-12-09 16:40:05
【问题描述】:
在 Go 中使用此代码 sn-p 时
cookie := http.Cookie{
Name: "token",
Value: token.Key,
Expires: token.Claims.Expires.Time(),
Path: "/",
Secure: true,
HttpOnly: true,
Domain: "mydomain.net",
SameSite: http.SameSiteStrictMode,
}
http.SetCookie(w, &cookie)
我在 Firefox 中收到以下警告
Cookie “token” will be soon rejected because it has the “SameSite” attribute set to “None” or an invalid value, without the “secure” attribute. To know more about the “SameSite“ attribute, read https://developer.mozilla.org/docs/Web/HTTP/Headers/Set-Cookie/SameSite
编辑
当我在发送响应之前查看标题时,我看到了
[token=eyJhbGciOiJSUzI1NiJ9.eyJkb21haW4iOiJzZWN1cmUubG9jYWwuaG9tbGlzaC5uZXQiLCJleHAiOjE2MDczNjYwMTkuMjYyNzIyLCJpYXQiOjE2MDczNjUxMTkuMjYyNzIyLCJpZCI6MSwibmJmIjoxNjA3MzY1MTE4LjI2MjcyMiwic3ViIjoicGhvbWxpc2gifQ.NPvtLiBIR3luRV5O2sgZyksUperDDaikDv4TMMDiLYvuHfYz4on7V09PhHSA2LQ5evKKtwwLrRVPFvqqoEf9rUOQPUnXLf7P-FLzShpI7neRpu0YwzcdgmUA-phTHaXAkr6havuQWlJItt-xhG6crq4p1Cb2oSCt5p0o8ncIQXXcdmdHHaeHLwxQSzu5x0EkcjiPFyRFPYxj-S1eMXnVEQTPqWa5tESVCwU6n-QnBAQ2RT3j0gQLEKZGERKEydKHDdiBDZ9d2LZSjinp0YJ1mw2BmpMt40sJcXmBKpR_8-M_xWvMK_MbL_GDYMEGsofyJNsPBFE31fHr94i81WnEqJpgZStoA7B2PfOCpKAr-c_DeVZ3THDlMnt1RQ72Fi25tDJx6_yKV13AJskqu9D2yQgcy6vqiS2auDpmLv13X385JG7uGjKYTJvc0rWr_AuozHnfn9sKj-3yb-tWSpSwIKCMEwKB_Ta0sBxGhokHQmhV2x-S3fP9HBAr06p50rufKPbHJCcsLA2YHcPBZivVRhM3FE1H6WM_xeWwMx9Xi-yJjmNPOX5uDFyf-VurTTbxwScWzXXYwTTYkh4Mmf5AdigQ4J9HVh8WLv-nRfsSVjM_tbTP9CiieGBfyA1Upv4CXfafBdKZLrZvrUs6lu-NUc1to5dIckpJlJebI-0S5yc; Path=/; Domain=mydomain.net; Expires=Mon, 07 Dec 2020 18:33:39 GMT; HttpOnly; Secure; SameSite=Strict]"}
注意:mydomain.net 是我网站的域名,在帖子中进行了更改以不泄露我的信息。这是通过 https 和有效证书完成的。
我怎样才能使 Firefox 接受的 cookie 安全?
编辑
在检查了 javascript 之后,我在代码中发现了我正在尝试的一行:
document.cookie = "token=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
【问题讨论】:
-
请包含从您的 Go 代码发送到 Firefox 的 Set-Cookie 标头。您确定通过 https 连接设置此 cookie:您无法通过 http 设置安全 cookie。该错误看起来很奇怪,因为 Strict 是非关键模式(无和默认更改语义)。
-
Volker- 已添加到帖子中。
-
你在 FF 方面看到了什么?您描述的设置不太可能导致此警告。
-
感谢 Volker 的陪伴。请参阅我的最新编辑。您是否愿意通过说“不要那样做”来回答问题来获得荣誉?
-
很高兴您发现了问题!另一个小提示:在 SetCookie 标头中设置 Expires 是可以的,如果您的声明也有过期时间,则可能没问题,但对于所有其他情况,设置 MaxAge 更简单,更不容易出错(线路中的数据更少,没有时区问题,也没有时钟偏差问题)。