CSRF
狐七 3/12/2022 计算机网络
# 1. CSRF原理
查看答案
CSRF是跨站请求伪造,用户在a网站已经有登录状态,攻击者诱导用户进入b网站,点击b网站向a网站发送跨域请求,冒用受害者执行操作。
# 2. CSRF的分类
查看答案
- GET类型:一个简单的img请求就可以
- POST类型:一个自动提交的表单,模拟POST请求
- 链接类型:a链接里面,用户手动点击
# 3. CSRF的特点
查看答案
- 通常攻击者的目的是为了冒用用户做操作,而不是窃取用户信息
- 一般攻击是从第三方网站发起的,所以通常是跨域的
# 4. CSRF 与 XSS 区别
查看答案
- 通常来说 CSRF 是由 XSS 实现的,CSRF 时常也被称为 XSRF
- 本质上讲,XSS 是代码注入问题,CSRF 是 HTTP 问题。
# 5. 如何预防CSRF
查看答案
# (一)阻止不明外域的访问
- 同源检测
同源检测:在请求头中加入Origin Header,Referer Header,如果都不存在就直接禁止访问 同源验证是一个相对简单的防范方法,能够防范绝大多数的CSRF攻击。但这并不是万无一失的,对于安全性要求较高,或者有较多用户输入内容的网站,我们就要对关键的接口做额外的防护措施。
- Samesite Cookie 跨域情况下,相关的cookie无法在请求的时候携带
# (二)提交时要求附加本域才能获取的信息
- JWT(Json Web Token)
- 服务器需要给这个用户生成一个Token,该Token通过加密算法对数据进行加密,一般Token都包括随机字符串和时间戳的组合,Token最好还是存在服务器的Session中
- 页面提交的时候手动添加Token
- 服务器收到Token会进行解密验证起有效性
- 双cookie
双重Cookie采用以下流程:
- 在用户访问网站页面时,向请求域名注入一个Cookie,内容为随机字符串
- 在前端向后端发起请求时,取出Cookie,并添加到URL的参数中
- 后端接口验证Cookie中的字段与URL参数中的字段是否一致,不一致则拒绝。
# 6. cookie 和 token 都存放在 header 中,为什么不会劫持 token?
查看答案
- 通过 csrf 在同个浏览器下面通过浏览器会自动带上 cookie 的但是 token 不会被浏览器带上
- token 是放在 jwt 里面下发给客户端的,而且不一定存储在哪里,不能通过 document.cookie 直接拿到,通过 jwt+ip 的方式可以防止被劫持,即使被劫持也是无效的 jwt。
# 7. 介绍下如何实现 token 加密
查看答案
- 需要一个secret(随机数)
- 后端利用secret和加密算法(如:HMAC-SHA256)对payload(如账号密码)生成一个字符串(token),返回前端
- 前端每次request在header中带上token
- 后端用同样的算法解密