1. CSRF攻击
1.1 什么是CSRF
CSRF(Cross-site request forgery,跨站请求伪造)
它是指攻击者利用了用户的身份信息,执行了用户非本意的操作
1.2 个人理解
- .假设我们登陆了银行网站,输入了正确的用户名和密码,网站会返回给我们一个cookie,cookie中记录了一个token令牌表示用户已经登录过,客户端会记录下这个cookie及域名,便于下次访问携带。
- 攻击者:做了一个链接,用各种标题引诱看到的人点击进去(例 :标题:惊天大瓜xxx)
- 用户看到攻击者发送的链接,并且点击,链接后会响应一个页面(只要给了响应,就完成了攻击!)
- 这个页面中包含危险代码如:https://bank.com/transfer?to=“张三”&money=“100000”,而请求的链接正是银行转账的接口to=‘转账给谁’,money=‘多少钱’,
此时就会请求银行的服务器,请求本身没有问题,但是因为请求的地址(bank.com)和之前存储的cookie所保存的地址相匹配,请求时就会带上之前存储的cookie,在服务端完成验证,转账成功!
2. 防御方式
防御手段 | 防御力 | 问题 |
---|---|---|
不使用cookie | ⭐️⭐️⭐️⭐️⭐️ | 兼容性略差 ssr会遇到困难,但可解决 (可使用localstorage存储) |
使用sameSite | ⭐️⭐️⭐️⭐️ | 兼容性差 容易挡住自己人 (浏览器属性,strict:严格/lax:宽松/none:不设置) |
使用csrf token | ⭐️⭐️⭐️⭐️⭐️ | 获取到token后未进行操作仍然会被攻击 (推荐使用,第一次请求网站时,多返回一个token,此token只能使用一次。点击转账使用后就过期。缺点:点击转账前,token未过期,遭受到攻击【概率很小】) |
使用referer防护 | ⭐️⭐️ | 过去很常用,现在已经发现漏洞 (访问时,检查来访网站) |
3. 面试题
介绍 csrf 攻击
CSRF 是跨站请求伪造,是一种挟制用户在当前已登录的Web应用上执行非本意的操作的攻击方法
它首先引导用户访问一个危险网站,当用户访问网站后,网站会发送请求到被攻击的站点,这次请求会携带用户的cookie发送,因此就利用了用户的身份信息完成攻击
防御 CSRF 攻击有多种手段:
- 不使用cookie
- 为表单添加校验的 token 校验
- cookie中使用sameSite字段
- 服务器检查 referer 字段