CSRF(跨站请求伪造)原理和攻防

华为云CSRF(跨站请求伪造)原理和攻防

  1. 原理

跨站请求伪造,就是webB 利用 webA客户端会话中的权限信息,伪造webA客户端的请求,对webA的服务进行恶意访问。

? 不会有浏览器同源限制吗

跨站请求伪造就是利用同源策略不适用于HTML标签的缺陷。

  1. CSRF的特点

· 攻击一般发起在第三方网站,而不是被攻击的网站。被攻击的网站无法防止攻击发生。

· 攻击利用受害者在被攻击网站的登录凭证,冒充受害者提交操作;而不是直接窃取数据。

· 整个过程攻击者并不能获取到受害者的登录凭证,仅仅是“冒用”。

· 跨站请求可以用各种方式:图片URL、超链接、CORS、Form提交等等。部分请求方式可以直接嵌入在第三方论坛、文章中,难以进行追踪。

CSRF通常是跨域的,因为外域通常更容易被攻击者掌控。但是如果本域下有容易被利用的功能,比如可以发图和链接的论坛和评论区,攻击可以直接在本域下进行,而且这种攻击更加危险。

  1. 攻击(几种常见的攻击类型)

l GET类型的CSRF

GET类型的CSRF利用非常简单,只需要一个HTTP请求,一般会这样利用:

在受害者访问含有这个img的页面后,浏览器会自动向http://bank.example/withdraw?...。bank.example就会收到包含受害者登录信息的一次跨域请求。

l POST类型的CSRF

这种类型的CSRF利用起来通常使用的是一个自动提交的表单,如:

访问该页面后,表单会自动提交,相当于模拟用户完成了一次POST操作。

POST类型的攻击通常比GET要求更加严格一点,但仍并不复杂。任何个人网站、博客,被黑客上传页面的网站都有可能是发起攻击的来源,后端接口不能将安全寄托在仅允许POST上面。

l 链接类型的CSRF

链接类型的CSRF并不常见,比起其他两种用户打开页面就中招的情况,这种需要用户点击链接才会触发。这种类型通常是在论坛中发布的图片中嵌入恶意链接,或者以广告的形式诱导用户中招,攻击者通常会以比较夸张的词语诱骗用户点击,例如:

重磅消息!!

由于之前用户登录了信任的网站A,并且保存登录状态,只要用户主动访问上面的这个PHP页面,则表示攻击成功。

  1. 防护

上文中讲了CSRF的两个特点:

· CSRF(通常)发生在第三方域名。

· CSRF攻击者不能获取到Cookie等信息,只是使用。

针对这两点,我们可以专门制定防护策略,如下:

· 阻止不明外域的访问

o 同源检测

o Samesite Cookie

· 提交时要求附加本域才能获取的信息

o CSRF Token

o 双重Cookie验证

以下我们对各种防护方法做详细说明:

同源检测

既然CSRF大多来自第三方网站,那么我们就直接禁止外域(或者不受信任的域名)对我们发起请求。

那么问题来了,我们如何判断请求是否来自外域呢?

在HTTP协议中,每一个异步请求都会携带两个Header,用于标记来源域名:

l Origin Header

l Referer Header(IE11无)

云:

请问下 : header里设置cftk 起到CSRF防护的原理是什么?
后台校验这个字段? @所有人

header添加自定义字段方式来避免csrf攻击,这个是从cookie拿出来放到请求里,console框架做了这个的校验,因为csrf攻击时不能追加header参数

你可能感兴趣的:(前端)