CSRF跨站请求伪造www.129028.com金沙

日期:2020-05-07编辑作者:Web前端

时间: 2019-09-08阅读: 827标签: 属性

时间: 2019-10-26阅读: 92标签: csrfCSRF 介绍

Chrome 51 开始,浏览器的 Cookie 新增加了一个SameSite属性,用来防止 CSRF 攻击和用户追踪。

CSRF,是跨站请求伪造(Cross Site Request Forgery)的缩写,是一种劫持受信任用户向服务器发送非预期请求的攻击方式。

一、CSRF 攻击是什么?

通常情况下,CSRF 攻击是攻击者借助受害者的 Cookie 骗取服务器的信任,在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击服务器,从而在并未授权的情况下执行在权限保护之下的操作。

Cookie 往往用来存储用户的身份信息,恶意网站可以设法伪造带有正确 Cookie 的 HTTP 请求,这就是 CSRF 攻击。

CSRF 攻击示例

举例来说,用户登陆了银行网站your-bank.com,银行服务器发来了一个 Cookie。

这里有一个网站,用户可以看文章,登录之后可以发评论。

Set-Cookie:id=a3fWa;

如果用户是登录状态,打开了这样的页面,

用户后来又访问了恶意网站malicious.com,上面有一个表单。

!DOCTYPE htmlhtml lang="zh-CN"head meta charset="UTF-8" titlecsrf攻击/title meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0" name="viewport" //headbody  form target="myIframe" action="_comment.php" metdod="POST" input type="text" name="content" value="csrf攻击" / /form !-- iframe 用来防止页面跳转 -- iframe name="myIframe"/iframe script var form = document.querySelector('#csrf'); form.submit(); /script/body/html
form action="your-bank.com/transfer" method="POST" .../form

就会自动在文章下发一条评论,这样就算完成了一次 CSRF 攻击。当然,如果你把这个页面放服务器上,然后做成一个链接,用户点击这个链接,同样可以完成攻击。

用户一旦被诱骗发送这个表单,银行网站就会收到带有正确 Cookie 的请求。为了防止这种攻击,表单一般都带有一个随机 token,告诉服务器这是真实请求。

我们来看看,这次的攻击是怎么成功的。

form action="your-bank.com/transfer" method="POST" input type="hidden" name="token" value="dad3weg34" .../form

首先我们要知道一些关于 Cookie 的知识。

这种第三方网站引导发出的 Cookie,就称为第三方 Cookie。它除了用于 CSRF 攻击,还可以用于用户追踪。

HTTP Cookie(也叫 Web Cookie或浏览器 Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。Cookie 使基于无状态的 HTTP 协议记录稳定的状态信息成为了可能。

比如,Facebook 在第三方网站插入一张看不见的图片。

好的,我们继续往下说。

img src="facebook.com" 

因为用户在网站登录后,这个网站服务端会在 Cookie 中会放一个凭证,这个凭证是后端用来验证用户身份的。在发评论的时候,提交评论的请求会带上这个凭证,后端通过判断这个凭证,来确认是哪个用户。

浏览器加载上面代码时,就会向 Facebook 发出带有 Cookie 的请求,从而 Facebook 就会知道你是谁,访问了什么网站。

登录时,设置 Cookie:

二、SameSite 属性

提交评论时,携带 Cookie:

Cookie 的SameSite属性用来限制第三方 Cookie,从而减少安全风险。

我们再来看看,发起攻击的页面里的内容。

它可以设置三个值。

body  form target="myIframe" action="_comment.php" metdod="POST" input type="text" name="content" value="csrf攻击" / /form !-- iframe 用来防止页面跳转 -- iframe name="myIframe"/iframe script var form = document.querySelector('#csrf'); form.submit(); /script/body

StrictLaxNone2.1 Strict

这些代码的意思就是,当用户点击这个链接,会自动提交 form 表单,而这个表单就是用来提交评论的,提交评论请求需要的参数,在 form 表单中也都已经准备好了,如果用户登录过网站,Cookie 中存储的用户的凭证,会随着请求一起传到服务器端。所以服务器端就会认为这是用户要提交一条评论。

Strict最为严格,完全禁止第三方 Cookie,跨站点时,任何情况下都不会发送 Cookie。换言之,只有当前网页的 URL 与请求目标一致,才会带上 Cookie。

CSRF 特点攻击一般发起在第三方网站,而不是被攻击的网站。攻击是利用受害者在被攻击网站的登录凭证,冒充受害者提交操作,仅仅是“冒用”,而不是直接窃取数据。攻击者预测出被攻击的网站接口的所有参数,成功伪造请求。防御方法SameSite 属性

Set-Cookie: CookieName=CookieValue; SameSite=Strict;

Cookie 的 SameSite 属性用来限制第三方 Cookie,从而减少安全风险,可以用来防止 CSRF 攻击和用户追踪。

这个规则过于严格,可能造成非常不好的用户体验。比如,当前网页有一个 GitHub 链接,用户点击跳转就不会带有 GitHub 的 Cookie,跳转过去总是未登陆状态。

它可以设置三个值。

2.2 Lax

StrictLaxNoneStrict

Lax规则稍稍放宽,大多数情况也是不发送第三方 Cookie,但是导航到目标网址的 Get 请求除外。

Strict最为严格,完全禁止第三方 Cookie,跨站点时,任何情况下都不会发送 Cookie。换言之,只有当前网页的 URL 与请求目标一致,才会带上 Cookie。

Set-Cookie: CookieName=CookieValue; SameSite=Lax;
Set-Cookie: CookieName=CookieValue; SameSite=Strict;

导航到目标网址的 GET 请求,只包括三种情况:链接,预加载请求,GET 表单。详见下表。

这个规则过于严格,可能造成非常不好的用户体验。比如,当前网页有一个 GitHub 链接,用户点击跳转就不会带有 GitHub 的 Cookie,跳转过去总是未登陆状态。

请求类型

Lax

示例

Lax 规则稍稍放宽,大多数情况也是不发送第三方 Cookie,但是导航到目标网址的 Get 请求除外。

正常情况

Set-Cookie:CookieName=CookieValue;SameSite=Lax;

Lax

Chrome 计划将 Lax 变为默认设置。这时,网站可以选择显式关闭 SameSite 属性,将其设为 None 。不过,前提是必须同时设置 Secure 属性(Cookie 只能通过 HTTPS 协议发送),否则无效。

链接a href="..."/a发送 Cookie发送 Cookie预加载link rel="prerender" href="..."/发送 Cookie发送 CookieGET 表单form method="GET" action="..."发送 Cookie发送 CookiePOST 表单form method="POST" action="..."发送 Cookie不发送iframeiframe src="..."/iframe发送 Cookie不发送AJAX$.get("...")发送 Cookie不发送Imageimg src="..."发送 Cookie不发送

下面的设置无效:

本文由www.129028.com金沙发布于Web前端,转载请注明出处:CSRF跨站请求伪造www.129028.com金沙

关键词:

HTTPS为什么是安全的?【www.129028.com金沙】

时间: 2019-09-07阅读: 202标签: 安全 二、HTTP与HTTPS的区别 1、https协议需要到ca申请证书 2、http是吵文本传输协议,信息是...

详细>>

用Python进行基础的函数式编程的教程,python函数

时间: 2019-09-07阅读: 169标签: 编程:apple:译序 用Python进行基础的函数式编程的教程,python函数 许多函数式文章讲述的是...

详细>>

为什么云端会不断泄漏数据?

服务提供商的局限性 1.明了你要负责什么 然而,云服务提供商仍然使用自己的密钥管理解决方案,这就使情况进一步...

详细>>

自己动手实现一个axioswww.129028.com金沙:

有很多同学看了本系列的前几篇之后建议我暂时先不用TS,于是小肆之后将把TS换成JS继续下面的文章。今天给大家带...

详细>>