Referer检查防CSRF真的可靠吗?为什么我设置了还是被绕过?
我们后端加了Referer检查来防CSRF,但测试时发现攻击者用空Referer或者同域跳转就能绕过。我前端也试过加一些header,但好像没用。是不是这种防护方式本身就不太靠谱?
另外,我在页面里用了下面这段CSS做基础样式隔离,会不会影响安全策略?
body {
margin: 0;
padding: 0;
font-family: -apple-system, BlinkMacSystemFont, sans-serif;
}
button {
cursor: pointer;
border: none;
background: #007bff;
color: white;
}
Referer 是浏览器自动带的请求头,但浏览器在某些场景下会丢掉它:比如从 HTTPS 跳到 HTTP、用户手动设置隐私选项、某些插件会清空、或者攻击者用

直接触发 POST(老浏览器可能不带 Referer)。更别说现在同源跳转+postMessage 或者利用 CORS 的方式都能绕过 Referer 校验。真正靠谱的 CSRF 防护得靠:
- 后端用 Anti-CSRF Token(比如生成一个随机 token 放在表单或 header 里,后端比对)
- 或者设置 SameSite Cookie 属性(
SameSite=Strict或Lax)- 如果必须用 Referer 校验,也得配合白名单逻辑,不能只判断“是否为空”这种弱逻辑
你提到的那段 CSS 完全不影响安全策略——
margin、padding、font-family这些纯样式声明不会引入任何 XSS 或 CSRF 风险。除非你动态注入了里有恶意内容,或者配合了@import引了外部样式表(但你现在这段是内联的,没问题)。再吐槽一句:前端加 header 防 CSRF 基本没用,因为请求是用户浏览器发的,攻击者只要能诱使用户访问恶意页面,就能让浏览器帮你“自愿”发请求,你加的自定义 header 完全可以被伪造或忽略(比如用
提交就根本带不上自定义 header)。总结:换 Token 或 SameSite 吧,别再死磕 Referer 了,真·防不住高阶攻击。