Cookie被篡改了怎么办?如何保证前端收到的Cookie没被用户修改? 一风珍 提问于 2026-03-12 13:19:19 阅读 59 安全 我们后端设置了登录态的 Cookie,但发现有些用户手动改了 Cookie 里的 userId,然后就能访问别人的数据。明明后端做了签名验证,但前端有时候还是会拿到被篡改过的值,比如用 DevTools 改成 userId=123 这种。 我试过加 HttpOnly 和 Secure 标志,但好像只能防 XSS,防不了用户自己改啊?是不是应该完全不信任 Cookie 里的任何数据?还是说必须每次请求都让后端重新校验? Cookie安全 我来解答 赞 16 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 2 条解答 夏侯博硕 Lv1 Cookie 被篡改确实是件头疼的事儿。虽然 HttpOnly 和 Secure 标志能防止一些常见的攻击,但确实挡不住用户自己在浏览器里动手脚。这个问题的核心就是前端不能完全信任 Cookie 里的数据。 你提到后端做了签名验证,这是个好的开始。但确实需要确保每次请求都经过后端的校验。可以优化成这样: 1. 前端每次发送请求时,带上这个可能被篡改的 Cookie。 2. 后端接收到请求后,立即对这个 Cookie 进行验证。如果验证失败,直接拒绝请求。 举个简单的例子,假设你使用的是 JWT(JSON Web Token),每次请求的时候在 headers 里带上 token,后端验证这个 token 的有效性。 fetch('/api/data', { method: 'GET', headers: { 'Authorization': Bearer ${yourJwtToken} } }) .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error('Error:', error)); 后端接收到这个请求后,会解析 Authorization 头,验证 JWT 是否有效。如果无效,返回 401 Unauthorized。 这样即使用户篡改了前端的 Cookie,只要后端每次都验证,就能有效地防止这种攻击。完全不信任 Cookie 里的任何数据是个不错的原则,但在实际操作中,通过这种方式可以在大部分情况下保证安全性。 回复 点赞 2026-03-23 23:25 程序员焕玲 Lv1 Cookie防篡改很简单——签名验证。 服务端设置Cookie时用密钥做个HMAC签名,一起存进Cookie。读取时重新计算签名对比,不一致就直接当无效处理。用户改的了值,改不了签名。 // 设置Cookie时 $value = '123'; $signature = hash_hmac('sha256', $value, $secretKey); setcookie('userId', $value, time()+3600, '/', '', true, true); setcookie('userId_sig', $signature, time()+3600, '/', '', true, true); // 读取时验证 $userId = $_COOKIE['userId'] ?? ''; $signature = $_COOKIE['userId_sig'] ?? ''; $expected = hash_hmac('sha256', $userId, $secretKey); if (!hash_equals($expected, $signature)) { // 签名不对,直接当没登录或返回错误 http_response_code(401); exit('Invalid cookie'); } 省事的话直接用现成的库,比如PHP的slim框架或Laravel自带这套,配置一下密钥就行。核心就是:Cookie里存的值可以明文,但必须带签名,后端每次请求都验签名。 回复 点赞 2026-03-12 13:29 加载更多 相关推荐 2 回答 114 浏览 如何确保前端Cookie内容没有被篡改? 最近在做用户登录功能时发现,如果直接用document.cookie = "userId=123",怎么防止中间人修改Cookie里的userId呢? 试过给Cookie加了加密,但后来想到就算加密了... 柯福 Dev 安全 2026-01-28 09:35:32 1 回答 56 浏览 React中如何验证Cookie数据未被篡改? 我在React项目里用js-cookie设置cookie,但不确定怎么防止别人篡改内容?比如这个登录token: import Cookies from 'js-cookie'; ... 敏涵 安全 2026-02-05 20:48:28 2 回答 120 浏览 Double Submit Cookie如何防止CSRF攻击?我的实现总出现跨域问题怎么办? 我按照教程实现了双重提交Cookie,后端设置了CSRF-TOKEN到Cookie和响应头,前端在请求头带上这个Token。但测试时发现,跨域请求时浏览器报“Blocked cookie with s... シ莉莉 安全 2026-02-03 20:16:34 2 回答 124 浏览 前端POST请求被漏洞扫描工具标记CSRF漏洞,但后端已加防伪cookie该怎么办? 我在开发登录功能时,前端用axios发送POST请求,后端已通过nginx设置了Csrf-Token cookie且验证了请求头中的token。但最近漏洞扫描工具提示"缺少CSRF防护",明明后端已经... 爱学习的欢欢 安全 2026-01-28 22:49:30 1 回答 62 浏览 设置 SameSite=Strict 的 Cookie 后,Vue 前端还能正常发送 CSRF Token 吗? 我在后端设置了带 SameSite=Strict 的 CSRF Cookie,但前端用 Vue 发请求时好像拿不到这个 Cookie,导致 CSRF Token 传不上去。我试过在 axios 请求里... 小志远 安全 2026-03-31 01:22:16 1 回答 52 浏览 前端设置 Cookie 时如何确保安全策略正确生效? 我在做登录功能时,后端返回了 Set-Cookie 头,但我发现即使加了 SameSite=Strict 和 Secure,本地开发环境(http)下 Cookie 还是没法被设置。是不是因为本地没用... 程序员光远 安全 2026-03-26 12:31:19 1 回答 49 浏览 前端如何防止Cookie被劫持? 我最近在用Vue做登录功能,后端返回的session cookie好像没加安全属性,担心会被XSS或者中间人攻击偷走。试过在axios里加withCredentials,但不知道前端能不能主动设置co... 皇甫俊凤 安全 2026-03-20 16:32:20 1 回答 60 浏览 前端设置Cookie时如何确保安全策略正确生效? 最近在用Vue做登录功能,后端返回了Set-Cookie头,但我发现浏览器里存的Cookie没有HttpOnly和Secure标志,担心有XSS风险。我试过在axios请求里加withCredenti... 南宫晶晶 安全 2026-03-19 08:51:25 2 回答 61 浏览 Cookie签名后为什么还是能被篡改? 我用 Express 的 cookie-parser 中间件加了签名,但发现用户手动改 Cookie 值后,服务端居然没报错,还能正常解析,这不就等于没签名吗? 我代码是这样写的: const exp... 皇甫令敏 安全 2026-03-14 03:05:22 2 回答 62 浏览 前端如何防止Cookie被第三方脚本窃取? 我在做登录功能时,后端设置了HttpOnly的Cookie,但还是担心XSS攻击下其他恶意脚本能读取到敏感信息。虽然HttpOnly能阻止JS访问,但如果页面引入了不可信的第三方脚本,会不会有别的泄露... 博主宇硕 安全 2026-03-08 14:43:21
你提到后端做了签名验证,这是个好的开始。但确实需要确保每次请求都经过后端的校验。可以优化成这样:
1. 前端每次发送请求时,带上这个可能被篡改的 Cookie。
2. 后端接收到请求后,立即对这个 Cookie 进行验证。如果验证失败,直接拒绝请求。
举个简单的例子,假设你使用的是 JWT(JSON Web Token),每次请求的时候在 headers 里带上 token,后端验证这个 token 的有效性。
后端接收到这个请求后,会解析 Authorization 头,验证 JWT 是否有效。如果无效,返回 401 Unauthorized。
这样即使用户篡改了前端的 Cookie,只要后端每次都验证,就能有效地防止这种攻击。完全不信任 Cookie 里的任何数据是个不错的原则,但在实际操作中,通过这种方式可以在大部分情况下保证安全性。
服务端设置Cookie时用密钥做个HMAC签名,一起存进Cookie。读取时重新计算签名对比,不一致就直接当无效处理。用户改的了值,改不了签名。
省事的话直接用现成的库,比如PHP的slim框架或Laravel自带这套,配置一下密钥就行。核心就是:Cookie里存的值可以明文,但必须带签名,后端每次请求都验签名。