关于 csrf 攻击中有两个疑问:
- csrf token 是不是指登录时后端返回的 token?有效期一般是多久?
- 为什么 token 能够防御攻击?token 不是可以轻易拿到吗? token 一般存在 cookie 中,攻击者不是可以读取 cookie 拿到 token 吗?就算 cookie 可以设置为不可读取,那浏览器F12,开发者工具中不是也能看到 cookie 中的 token 吗?攻击者直接拿这个 token 发送请求不是也可以吗?
关于 csrf 攻击中有两个疑问:
CSRF Token只是跨域站点伪造请求(CSRF)的一种解决办法,它防御不了cookie被盗的情况,一般位于源站下发的表单内<input type='hidden' id='csrf_token' value='xxxx'>
CSRF具体是什么?假设源站有一个这样的API:https://example.org/api?action=abc&foo=bar
,攻击者伪造了一个站点 not-example.org
发送请求,一般浏览器的同源策略会阻止此次请求,但有些方式可以绕过同源策略,比如利用 <img src>
发送,而csrf token的作用就在于此,源站发送请求会携带下发的token,伪造的跨域站点则没有。
现在CSRF已经很少见了,因为大部分网站都流行RESTful API,这种callback式的api很少。
3 回答2.3k 阅读✓ 已解决
5 回答3.6k 阅读
1 回答1.6k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
1 回答1.1k 阅读
988 阅读
CSRF 的 CS 是跨站的意思。比如说,你在思否页面点击下面的链接,打开的是百度网站:
百度搜索:CSRF
从思否到百度,这就是一次跨站操作,而且你的搜索内容是被我所控制的。不过这里由于百度的搜索接口不会有任何敏感操作,所以不会有任何危害,但如果这是一个转账的链接,那么如果你登录了对应的网站,你点一下就会触发转账,攻击得逞。
你可能会认为没有网站会使用 get 方式来提交敏感操作,所以思否里面不可能发起更高级的攻击,因此 CSRF 漏洞只能恶搞一下什么的。但是对于攻击者而言,他可以自己做一个钓鱼网站,或者利用其他网站的 XSS 漏洞构造请求(不要怀疑,思否是有过 XSS 漏洞的,所幸似乎收到被大规模利用的记录)。
CSRF token 不应该放在 cookie 里面,因为 CSRF 利用的就是请求会自带 cookies 的缺陷,虽然使用 cookie 下发 CSRF token 不会直接造成漏洞,但这距离使用 cookie 提交 CSRF token 也就差临门一脚了,CSRF 必须放在 cookie 之外的地方提交,否则就形同虚设了。