CSRF 跨站请求伪造

2021-01-19  本文已影响0人  bestCindy

什么是 CSRF

CSRF 英文全称是 Cross-site request forgery,又叫做 “跨站请求伪造”

黑客首先引诱用户打开黑客的网站,在黑客的网站中,利用用户的登录状态发起跨站请求

就是黑客利用了用户的登录状态,并通过第三方的站点来做一些事情

CSRF 可以做哪些事情

(一)自动发起 Get 请求

举个例子:

<body>
  <h1>黑客的站点</h1>
  <img src="https://xxxxxxxx">
</body>

在这段代码中,黑客可以将转账的请求接口隐藏在 img 标签内,当页面被加载时,浏览器会自动发起 img 的资源请求

如果服务器没有对请求进行判断的话,那么服务器就会认为这是一个转账的请求

(二)自动发起 POST 请求

就是当用户打开黑客的站点的时候自动提交 POST 请求

(三)引诱用户点击链接

比如页面上放了一张美女的图片,下面放了图片下载的地址,但是这个下载地址实际上是黑客用来转账的接口

注意:和 XSS 不同的是,CSRF 攻击不需要将恶意的代码注入到用户的页面,仅仅是利用服务器漏洞和用户的登录状态来实施攻击

明确产生 CSRF 攻击的三个必要条件

如何防止 CSRF 攻击

Cookie 的 SameSite 属性

Cookie 是浏览器和服务器之间维护登录状态的一个关键数据

我们可以在设置 HTTP 响应头中通过 set-cookie 设置 Cookie 时,可以带上 SameSite 选项

这样我们在实现从第三方站点发送请求时禁止 Cookie 的发送

设置之后,浏览器通过不同来源发送 HTTP 请求时,有如下区别:

(二)验证请求的来源站点

就是需要告诉服务器请求来源,然后在服务器端验证请求来源的站点

怎么验证呢?

需要用到 HTTP 请求头的 RefererOrigin 属性

Referer 记录了该 HTTP 请求的来源地址,但是有一些场景不适合暴露请求的 url 给服务器,因此浏览器提供给开发者一个选项,具体参考 Referer Policy

但是在服务器端验证请求头中的 Referer 并不是太可靠,因此标准委员会又制定了 Origin 属性

(三)CSRF Token

CSRF 验证可以过滤掉 CSRF 攻击

大致流程

上一篇 下一篇

猜你喜欢

热点阅读