CSRF(Cross-site request forgery)跨站请求伪造
概念: 是指黑客引诱用户打开黑客的网站,在黑客的网站中,利用用户的登录状态发起的跨站请求。简单来讲,CSRF 攻击指黑客利用了用户的登录状态,并通过第三方的站点来做一些坏事。
攻击方式:
1-自动发起 Get 请求
比如将转账请求隐藏在 img 标签内, 欺骗浏览器这是一张图片, 等加载时, 再发起转账请求
2-自动发起 POST 请求
网页内构建隐藏表单, 里面含有转账接口. 通过诱导用户登陆的方式, 来让表单自动提交, 从而执行转账操作.
3-引诱用户点击链接
通过诱导用户点击含有转账接口的链接, 来实现用户资金的转移.
综上, CSRF攻击不需要将恶意代码注入用户的页面, 而是利用服务器的漏洞和用户的登录状态来实现出乎意料的攻击.
如何防止 CSRF 攻击:
发起 CSRF 攻击的三个必要条件:
1-目标网站要有 CSRF 漏洞
2-用户要登录过目标站点, 并且在浏览器上保持有该站点的登录状态
3-需要用户打开一个第三方站点, 可以是黑客的站点, 也可以是一些论坛
满足以上三个条件, 黑客就可以进行 CSRF 攻击了.
如何让服务器避免遭受到 CSRF 攻击, 通常有以下几种途径:
1-充分利用好 Cookie 的 SameSite 属性
设定 Cookie 中的 SameSite 属性来实现对某些关键 Cookie 数据的传送
2-验证请求的来源站点
通过设定HTTP请求头中的Referer和Origin属性来判断是否禁止第三方站点的请求
3-CSRF Token
在向服务器发起请求时, 服务器生成一个 CSRF Token. 若用户端要发起转账请求, 则需要带上这个Token, 同时 服务器 会检验该 Token 是否合法, 若是第三方发起的请求, 没有或者非法都会导致拒绝.
参考: 极客时间-浏览器工作原理与实践