每日一问---前端安全CSRF

关于前端安全CSRF

跨站请求伪造(英語:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。

1.攻击原理

假设用户登录到不受保护的某银行网站,并且使用会话 cookie 或 JWT cookie 进行身份验证,并进行转账操作

假如其转账操作的URL地址如下: 
http://www.examplebank.com/withdraw?account=AccoutName&amount=1000&for=PayeeName

攻击者欺骗用户执行脚本(通过点击垃圾邮件链接或类似)

用户进入第三方网站 
<img src="http://www.examplebank.com/withdraw?account=Alice&amount=1000&for=Badman

由于不受保护的某银行网站的登录信息未过期,服务器将成功地验证用户身份并执行交易

在CSRF中攻击者并不直接获取用户信息,其只是欺骗用户浏览器,让其以用户的名义进行操作

2.攻击流程

image

3.预防策略

1.检查Referer字段

HTTP头中有一个Referer字段,这个字段用以标明请求来源于哪个地址。

image

在处理敏感数据请求时,通常来说,Referer字段应和请求的地址位于同一域名下。

以上面银行操作为例,

Referer字段地址通常应该是转帐按钮所在的网页地址,应该也位于www.examplebank.com之下。

而如果是CSRF攻击传来的请求,Referer字段会是包含恶意网址的地址,

不会位于www.examplebank.com之下,这时候服务器就能识别出恶意的访问。

但存在恶意篡改其Referer字段的可能

2.token验证
既然攻击者利用第三方cookie的方式去获取用户信息,并验证用户身份这种方式进行攻击,
可以采取增加一个独立的token进行认证,
在用户登录信任网站的时候,服务端生成一个唯一token并给到用户,
用户每次和服务端通信,都会校验token的有效性,
如果校验token失败,则认为可能是 CSRF 攻击而拒绝该请求。

参考资料

wiki百科
XSS CSRF 例子


title: 每日一问—
date: 2020-03-28
category: 技术 # 归类
tag: [‘技术’] # 标签
tagcloud: [‘技术’] # 云标签
archives: [‘技术’,’每日问题’,’web安全’] # 归档


页面字体以及格式

<div style="font-size:18px;color:#333;line-height:24px;font-family:楷体;"> </div>

问题标题

<font style="font-weight:700"></font>

引用

<font style="color:blue;"></font>

一般层级

#### ##### ######

注意事项

<font style="color:red;"></font>

加重

<font style="font-weight:700;color:#333;"></font>

Recommended Posts