HttpOnly 能防 CSRF 吗?我是不是搞混了概念?

欧阳雨萱 阅读 2

最近在做登录功能,看到资料说要加 HttpOnly 防止 XSS 窃取 cookie,但我以为它也能防 CSRF,结果测试发现照样能被跨站请求伪造,是不是理解错了?

比如我后端设置了 Set-Cookie: sessionid=abc123; HttpOnly; Secure,前端用 fetch 发请求时浏览器还是会自动带上这个 cookie,那攻击者构造一个恶意页面发起请求,不就绕过了吗?

<!-- 恶意网站上的代码 -->
<form action="https://mybank.com/transfer" method="POST">
  <input type="hidden" name="to" value="hacker">
  <input type="hidden" name="amount" value="1000">
  <input type="submit" value="点我领红包!">
</form>

HttpOnly 到底和 CSRF 有啥关系?是不是还得额外加 CSRF token 才行?

我来解答 赞 1 收藏
二维码
手机扫码查看
1 条解答
文鑫(打工版)
你确实搞混了,HttpOnly 只是管 JavaScript 读不到 cookie,完全挡不住浏览器自动带 cookie 发请求,所以防不住 CSRF。最简单的办法是直接在 Set-Cookie 里加个 SameSite=Strict 或者 SameSite=Lax 属性,这样浏览器遇到跨站请求就不会带 cookie 了,比折腾 CSRF token 省事多了。

Set-Cookie: sessionid=abc123; HttpOnly; Secure; SameSite=Strict
点赞 1
2026-03-03 21:17