Cookie安全问题:路径设置过宽的漏洞及同域名多应用共享Cookie方案问询
问题解答
1. 为什么设置path="/"会触发安全告警?
Cookie的Path属性是前缀匹配规则,path设为/意味着该Cookie会被携带到www.kishore.com下所有路径的请求中,若域名下存在非你方可控的第三方应用,会存在Cookie泄露的风险,这是安全扫描告警的根本原因。
2. 仅设置domain为kishore.com能不能解决你的问题?
不能。domain属性仅控制Cookie在哪些子域名下可访问,不会改变同域名下的路径匹配规则。哪怕你将domain设为kishore.com,只要Path还是/travelSite,/researchSite路径下的应用依然无法读取到该Cookie。
3. 可行的解决方案
方案一:补充安全配置,申请将扫描告警标记为误判
如果www.kishore.com下所有部署的应用均为你方可控,不存在未授权的第三方应用,你可以补充以下安全配置,证明path="/"的风险已被控制,申请消除告警:
- 你已配置
cookie.setSecure(true),Cookie仅在HTTPS协议下传输,不会被HTTP劫持泄露 - 你已配置
cookie.setHttpOnly(true),避免前端XSS漏洞读取Cookie - 新增SameSite属性配置,限制跨站请求携带Cookie,降低CSRF风险:
cookie.setAttribute("SameSite", "Strict");
该方案无需调整业务逻辑,是成本最低的实现方式。
方案二:调整业务逻辑,双应用各自生成独立Cookie
如果无法通过扫描告警的误判申请,你可以调整凭证同步逻辑:
- 用户在travelSite生成有效凭证后,携带加密后的凭证跳转到researchSite的同步接口
- researchSite校验凭证合法后,自行生成同名Cookie,Path设为
/researchSite,其余Secure、HttpOnly属性保持一致
两个应用的Cookie都符合路径最小化原则,不会触发安全告警,同时都能拿到所需的用户身份信息。
方案三:拆分应用到不同子域名,通过domain配置共享Cookie
如果后续你将两个应用分别部署到独立子域名(如travel.kishore.com、research.kishore.com),就可以通过设置domain实现跨子域名共享Cookie,操作方式如下:
// travelSite侧生成Cookie代码 Cookie cookie = new Cookie("someName","someValue"); cookie.setSecure(true); cookie.setHttpOnly(true); cookie.setAttribute("SameSite", "Strict"); cookie.setDomain("kishore.com"); cookie.setPath("/");
此时Cookie的作用域是所有*.kishore.com的子域名,两个子域名下的应用都可以正常读取该Cookie,且因为子域名都为你方可控,安全风险较低,也可以申请消除扫描告警。
内容的提问来源于stack exchange,提问作者Kishore Kumar Korada
相关产品推荐
相关产品推荐

