5月30日 21:29

SameSite Cookie 为什么能防止 CSRF?实际配置怎么写?

SameSite Cookie 能防止 CSRF,是因为它把“跨站请求是否携带 Cookie”的决定权交给浏览器。攻击者可以在自己的网站里放自动提交表单或隐藏图片,请求你的站点;但如果浏览器因为 SameSite 策略不发送登录 Cookie,服务端就无法把这次请求识别成已登录用户操作。

追问

SameSite 防的是哪类 CSRF?

它主要防攻击者借浏览器自动带 Cookie 发起的跨站状态修改请求,比如隐藏表单 POST、图片触发 GET 副作用等。

Lax 为什么适合作默认值?

Strict 会让外部跳转进入站点时也不带 Cookie,体验较差。Lax 保留顶级 GET 导航登录体验,同时拦住更危险的跨站提交。

只有确实需要跨站发送的 Cookie 才应该设置 None,比如第三方登录状态、嵌入式组件或跨站 SSO 临时票据。

SameSite 和 CORS 是一回事吗?

不是。CORS 决定前端脚本能否读取跨源响应,SameSite 决定跨站请求是否携带 Cookie。

写段配置

http
Set-Cookie: session=abc; Secure; HttpOnly; SameSite=Lax; Path=/
标签:CSRF