Web安全系列之CSRF攻击,2024年最新网络安全面试问题和答案

117 阅读5分钟

需要明确的是,浏览器设置和携带cookie是根据请求中服务器的域名来设置和获取的,而非请求所在网站域名。所以,用户首次在网站a请求服务器A得到的cookie对应服务器A的域名,在网站b中再次请求时也会携带服务器A域名下的cookie。其实仔细想想,如果cookie对应的是网站请求方的域名,那么一个网站如果请求多个服务器域名的话,那么它们之间的cookie很可能冲突,而且也无法通过cookie来做单点登陆了。

csrf的防范

  1. 验证 HTTP Referer 字段

HTTP 的 Referer 字段记录了该 HTTP 请求的来源(网址)。通过 HTTP Referer 可以判断请求所在的网址,进而拦截外站的非法请求。

使用这中方式防范 CSRF 的应当注意

  • 请求发起者可以设置不携带 Referer,重定向也不会携带 Referer
  • Referer 由浏览器携带,也可能由于浏览器的实现差异导致问题,或者因为浏览器安全漏洞导致被篡改。
  • 对于页面请求来说,要注意 Referer 可能是搜索引擎页面

关于 Referer 的知识可以参考阮一峰老师的HTTP Referer 教程

  1. 使用验证码校验

对于重要操作如支付来说,可以使用验证码验证用户身份。

  1. CSRF Token

CSRF 的本质在于盗用用户的 Cookie 信息然后作为用户凭证冒充用户的操作,如果在验证用户流程中多加个 CSRF Token 的验证,判断 Cookie 是否来自用户网站。那么第三网址发起的请求虽然携带 Cookie 但是获取不到用户网站的 CSRF Token,就可以在服务端设置拦截。

CSRF TOken 可以放置在请求参数中,也可以放在自定义 HTTP 头部字段。但是放在请求中可能由于 Get 请求被放置在 URL 中,再跳转第三方网站时被 Referer 携带泄露。所以推荐放在 HTTP 头部字段中

  1. 双重Cookie

csrf攻击的原因是请求会自动携带 Cookie,我们可以利用 JS 无法获取跨域 Cookie 的同源限制。发送请求时携带 Cookie 参数,服务器端校验开发者携带的 Cookie 和浏览器自动携带的 Cookie 是否一致来判断是否为正常请求。

双重 Cookie 有以下限制

  • Cookie 二级域名的跨域问题(Domain 设置为主域可能会由于其它子域被攻击而导致安全问题)
  • 无法设置 Cookie 的 HttpOnly
  • Cookie 导致请求数据加大,资源浪费
  1. 利用 Cookie 的新属性 SameSite

现代浏览器将 Cookie 的 SameSite 设置为 Lax 其实已经将大部分跨域请求都设置为不再携带 Cookie。当然如果设置为 Strict 就可以完全避免跨域携带 Cookie 了。具体详见做一个真正懂cookie的前端

使用 SameSite 严格模式的缺点

  • 新标签重新打开也不携带 Cookie,需要用户重复登录
  • 二级域名无法共享 Cookie,需要用户重复登录
  1. 检测、监控
  • CSRF检测工具:CSRFTester
  • CSRF监控:代理层统一拦截监控
  1. 防止网站被利用
  • 严格管理所有的上传接口,防止任何预期之外的上传内容(例如HTML)。
  • 添加Header X-Content-Type-Options: nosniff 防止黑客上传HTML内容的资源(例如图片)被解析为网页。
  • 对于用户上传的图片,进行转存或者校验。不要直接使用用户填写的图片链接。
  • 当前用户打开其他用户填写的链接时,需告知风险(这也是很多论坛不允许直接在内容中发布外域链接的原因之一,不仅仅是为了用户留存,也有安全考虑)。

总结

CSRF攻击利用了浏览器跨域自动携带 Cookie 的特点,我们可以从不同维度防范与减少 CSRF攻击的风险。对于前端安全这块,我也是刚刚开始学习和研究,如果有错误的地方,欢迎大家指出。

01网络安全工程师(白帽子)企业级学习路线

第一阶段:安全基础(入门)

给大家的福利

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:

在这里插入图片描述

因篇幅有限,仅展示部分资料

网络安全面试题

绿盟护网行动

还有大家最喜欢的黑客技术

网络安全源码合集+工具包

所有资料共282G,朋友们如果有需要全套《网络安全入门+黑客进阶学习资源包》,可以扫描下方二维码领取(如遇扫码问题,可以在评论区留言领取哦)~

详情docs.qq.com/doc/DSlhRRFFyU2pVZGhS