CSRF 跨站请求伪造
1. 介绍一下CSRF攻击的原理和防御?
(Cross Site Request Forgy),打开同一浏览器时其他的网站对本网站造成的影响。原理就是攻击者构造出一个后端请求地址,诱导用户点击或者通过某些途径自动发起请求。如果用户是在登录状态下的话,后端就以为是用户在操作,从而进行相应的逻辑。
举个例子,用户同时打开了A网站和钓鱼网站。 假设A网站中有一个通过 GET 请求提交用户评论的接口,那么攻击者就可以在钓鱼网站中加入一个图片,图片的地址就是评论接口。
<img src="http://www.domain.com/xxx?comment='attack'"/>
1.1 CSRF攻击原理
- 用户登录A网站
- A网站确认身份(给客户端cookie)
- B网站页面向A网站发起请求(带上A网站身份)
1.2 CSRF防御
- Get 请求不对数据进行修改
- 不让第三方网站访问到用户 Cookie
- 阻止第三方网站请求接口
请求时附带验证信息,比如验证码或者 Token
SameSite
- 可以对 Cookie 设置 SameSite 属性。该属性表示 Cookie 不随着跨域请求发送,可以很大程度减少 CSRF 的攻击,但是该属性目前并不是所有浏览器都兼容。
- Token验证
- cookie是发送时自动带上的,而不会主动带上Token,所以在每次发送时主动发送Token
- Referer验证
- 对于需要防范 CSRF 的请求,我们可以通过验证 Referer 来判断该请求是否为第三方网站发起的。
- 隐藏令牌
- 主动在HTTP头部中添加令牌信息
禁止第三方网站带cookies
same-site属性。 设置只有同一站点的请求才能携带cookie
1.3 CSRF蠕虫
如果某个用户打开了被攻击网页,并且用户同时访问了攻击者的网页。 那么攻击者的网页就会使用用户的身份发送一些请求,并且常用用户的身份发布一些评论或文章,里面包含攻击者的网页链接。如果其他用户看到了这个用户的这条评论,都甚至可以不点击,其他用户也会被盗用身份发送一些恶意请求。这样病毒的传播就会越来越快,影响越来越大。
1.4 CSRF攻击危害
- 利用用户登录态
- 用户不知情
- 完成业务请求
- 盗取用户资金
- 冒充用户发帖背锅
- 损坏网站名誉