涉及面试题:什么是
CSRF
攻击?如何防范CSRF
攻击?
CSRF
中文名为跨站请求伪造。原理就是攻击者构造出一个后端请求地址,诱导用户点击或者通过某些途径自动发起请求。如果用户是在登录状态下的话,后端就以为是用户在操作,从而进行相应的逻辑。
举个例子,假设网站中有一个通过 GET
请求提交用户评论的接口,那么攻击者就可以在钓鱼网站中加入一个图片,图片的地址就是评论接口
<img src="http://www.domain.com/xxx?comment='attack'"/>
那么你是否会想到使用
POST
方式提交请求是不是就没有这个问题了呢?其实并不是,使用这种方式也不是百分百安全的,攻击者同样可以诱导用户进入某个页面,在页面中通过表单提交POST
请求。
如何防御
Get
请求不对数据进行修改- 不让第三方网站访问到用户
Cookie
- 阻止第三方网站请求接口
- 请求时附带验证信息,比如验证码或者
Token
SameSite
可以对
Cookie
设置SameSite
属性。该属性表示Cookie
不随着跨域请求发送,可以很大程度减少CSRF
的攻击,但是该属性目前并不是所有浏览器都兼容。
验证 Referer
对于需要防范
CSRF
的请求,我们可以通过验证Referer
来判断该请求是否为第三方网站发起的。
Token
服务器下发一个随机
Token
,每次发起请求时将Token
携带上,服务器验证Token
是否有效