CSRF(跨站请求伪造)
简单场景
基本流程:假设A网站是合法的,B网站是恶意网站
小明是一个A网站的注册用户,一般登陆后,网站都会把用户凭证放在cookie中,在一定时期内小明再访问A网站就不需要重新登陆了。
假设在这个有效期内,小明访问了B网站的一个恶意链接(可以是点击也可是打开网页等),B网站精心设置了一系列操作,利用小明A网站的登陆信息访问了A网站的一系列接口。比如删除接口等等。
案例举到这里可以看出,要实现CSRF攻击主要满足:
1.A网站对应的接口要有漏洞
2.小明已经登陆了A网站,具有凭证
如何防御?
1.设置cookie的SameSite属性
由于CSRF相当于利用登陆用户的cookie(不能修改),而SameSite属性只有同一个网站才可以使用
缺点:这个属性目前兼容性比较差
2.服务端验证客户端请求中的refer字段
r缺点:refer可以比较容易的进行抓包修改
3.在网站前端(A网站)设置csrf_token
对应post请求可以再表单中添加隐藏的input标签,设置值为csrf_token
对于get请求可以设置在meta标签中等
然后每次刷新页面csrf_token需要改变,可以在cookie中也设置csrf_token,然后服务端判断两个cookie是否相等决定响应
网友评论