Cookie 的 Domain 设置到底该怎么配才安全?
我在做登录功能时设置了 Cookie,但对 Domain 属性有点拿不准。比如我的前端是 app.example.com,后端 API 是 api.example.com,想让 Cookie 能在两个子域共享,就写了 Domain=.example.com。
但同事说这样有安全风险,可能被其他子域读到?可我不设 Domain 的话,Cookie 又只在 app.example.com 生效,API 请求带不上凭证。到底该怎么配才既安全又能跨子域?
我试过只设 Path,也试过不设 Domain,但跨子域请求时后端根本收不到 Cookie。现在卡在这儿了,求指点!
首先明确一点,想让 app.example.com 和 api.example.com 共享 Cookie,Domain=.example.com 这种写法确实能实现跨子域共享,但你同事说得对,确实存在安全风险。因为这样所有 *.example.com 的子域名都能访问这个 Cookie,要是有不安全的子域名存在,就可能被利用。
我的建议是采用更精细化的控制方案:把登录相关的敏感 Cookie 设置成 SameSite=Strict 或 Lax,同时加上 Secure 属性(如果项目在 HTTPS 下运行)。然后针对不同的域名分别设置 Cookie,不要图省事用通配符。
具体操作可以这样:
别走弯路,虽然麻烦点,但安全性更有保障。实在要共享某些非敏感信息,才考虑用 .example.com 的方式,并且尽量缩小作用范围和有效期。
记住,Cookie 安全性配置没做好,很容易被 XSS 攻击利用,这点千万别大意。
别忘了后端也要校验来源域名,多重保险总没错。干了这么多年,这种配置见多了,放心用吧。