You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google XSS游戏Set-Cookie无法设置Cookie问题排查与修复求助

XSS游戏通关失败:Cookie未自动设置问题的原因与修复

问题原因

1. Cookie属性不符合浏览器安全策略

现代浏览器对Cookie的设置有严格的安全限制,最常见的是以下两点:

  • Secure属性缺失:如果游戏网站使用HTTPS协议,接口返回的Set-Cookie头没有添加Secure标记,浏览器会拒绝在HTTPS环境下存储非安全的Cookie。
  • SameSite属性限制:默认情况下浏览器采用SameSite=Lax策略,而通过脚本(XHR)发起的请求如果是POST类型,或者触发时机在alert弹窗之后(页面上下文被临时中断),未显式指定SameSite=None; Secure的Cookie会被浏览器拦截,不进行存储。

2. 请求上下文被中断

当你触发alert弹窗后,JavaScript执行流程会被阻塞,直到你点击确定。如果levelSolved函数的XHR请求是在alert之后异步发送的,响应返回时页面的执行上下文可能已经发生变化,导致浏览器没有正确处理Set-Cookie头。

3. Cookie路径/域名配置错误

如果接口返回的Set-Cookie头中指定的Domain或Path与当前页面不匹配(比如Domain设为appspot.com而非xss-game.appspot.com,Path设为/record而非/),浏览器会拒绝存储该Cookie,因为它不属于当前页面的作用域。

修复方案

1. 手动设置Cookie(快速绕过)

打开浏览器开发者工具(F12)→ 切换到Application面板 → 左侧选择Cookies → 点击当前游戏域名,手动添加Cookie:

  • 名称:参考接口返回的Set-Cookie头(比如level_solved)
  • 值:对应关卡的编号(比如通关第一关就设为1)
  • Domain:设为xss-game.appspot.com
  • Path:设为/
  • 勾选Secure(因为网站是HTTPS)
    设置完成后刷新页面即可正常通关。

2. 修改游戏的通关请求逻辑

通过开发者工具的Console面板修改页面JavaScript代码,调整levelSolved函数的请求方式:

  • 给XHR请求添加withCredentials: true(强制开启凭证携带)
  • 将异步请求改为同步请求(确保响应处理完成后再继续执行):
function levelSolved(level) {
  var xhr = new XMLHttpRequest();
  xhr.open('POST', '/record', false); // 第三个参数设为false,同步请求
  xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  xhr.withCredentials = true;
  xhr.send('level=' + level);
}

重新触发alert即可让浏览器正确处理Set-Cookie。

3. 接口端修复(如果有权限)

修改/record接口的Set-Cookie响应头,添加必要的安全属性:

Set-Cookie: level_solved=1; Domain=xss-game.appspot.com; Path=/; Secure; SameSite=None

这样浏览器就能正常存储Cookie,无需手动干预。

内容的提问来源于stack exchange,提问作者hypercodeplace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 18:28:01