HttpOnly 能防 CSRF 吗?我是不是搞混了概念?
最近在做登录功能,看到资料说要加 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 才行?
最简单粗暴的方案就是在表单里加个token:
后端每次校验这个token,不匹配的直接拒绝。这才是防CSRF的正确姿势。