34 | CSRF攻击:陌生链接不要随便点
34 | CSRF攻击:陌生链接不要随便点
讲述:李兵
时长13:38大小10.90M
什么是 CSRF 攻击
1. 自动发起 Get 请求
2. 自动发起 POST 请求
3. 引诱用户点击链接
如何防止 CSRF 攻击
1. 充分利用好 Cookie 的 SameSite 属性
2. 验证请求的来源站点
3. CSRF Token
总结
思考题
赞 15
提建议
精选留言(29)
- 淡2019-10-22“简言之,如果你从极客时间的页面中访问 InfoQ 的资源,而 InfoQ 的某些 Cookie 设置了 SameSite = Strict 的话,那么这些 Cookie 是不会被发送到 InfoQ 的服务器上的”,这里是不是我理解错了还是写错了。应该是不会发送到极客时间的服务器上,或者说极客时间的某些Cookie设置了SameSite = Strict吧。
作者回复: 我把整个流程写一遍: 首先假设你发出登录InfoQ的站点请求,然后在InfoQ返回HTTP响应头给浏览器,InfoQ响应头中的某些set-cookie字段如下所示: set-cookie: a_value=avalue_xxx; expires=Thu, 21-Nov-2019 03:53:16 GMT; path=/; domain=.infoq.com; SameSite=strict set-cookie: b_value=bvalue_xxx; expires=Thu, 21-Nov-2019 03:53:16 GMT; path=/; domain=.infoq.com; SameSite=lax set-cookie: c_value=cvaule_xxx; expires=Thu, 21-Nov-2019 03:53:16 GMT; path=/; domain=.infoq.com; SameSite=none set-cookie: d_value=dvaule_xxxx; expires=Thu, 21-Nov-2019 03:53:16 GMT; path=/; domain=.infoq.com; 我们可以看出, a_value的SameSite属性设置成了strict, b_value的SameSite属性设置成了lax c_value的SameSite属性值设置成了none d_value没有设置SameSite属性值 好,这些Cookie设置好之后,当你再次在InfoQ的页面内部请求InfoQ的资源时,这些Cookie信息都会被附加到HTTP的请求头中,如下所示: cookie: a_value=avalue_xxx;b_value=bvalue_xxx;c_value=cvaule_xxx;d_value=dvaule_xxxx; 但是,假如你从time.geekbang.org的页面中,通过a标签打开页面,如下所示: <a href="https://www.infoq.cn/sendcoin?user=hacker&number=100">点我下载</a> 当用户点击整个链接的时候,因为InfoQ中a_vaule的SameSite的值设置成了strict,那么a_vaule的值将不会被携带到这个请求的HTTP头中。 如果time.geekbang.org的页面中,有通过img来加载的infoq的资源代码,如下所示: <img src="https://www.infoq.cn/sendcoin?user=hacker&number=100"> 那么在加载infoQ资源的时候,只会携带c_value,和d_value的值。 这样写不知道你明白没有,如果还有疑惑欢迎继续提问。
共 5 条评论66 - 李小白2019-10-22老师,我想请问一下,在浏览器打开第三方站点是如何拿到极客时间站点cookie的?第三方站点和极客时间的站点不同,存在同源策略,所以转账请求验证cookie也是不通过的,那么CSRF是如何攻击的呢?共 15 条评论18
- 許敲敲2019-10-22老师,这方面有比较好的资料或是书嘛?想多了解一下
作者回复: 主要是根据这几年工作经验和浏览器文档、源码总结出来的,因为维护一个日活跃几千万的浏览器,能带来大量的流量,而流量就是金钱,因此我们的浏览器会遭受到各种类型的攻击,所以我们有很大一部分时间都是在处理攻击! 当然为了写这个专栏,网上web安全相关的书籍我也买了好多,基本都看了一圈,但是有一些问题: 第一是这些书籍都有一些年限了,里面的知识比较滞后! 第二,大多数和前端关系不是太大 第三,大多数写的比较零碎 你们如果发现有好的web安全相关的书籍,也可以推荐下!
共 2 条评论14 - 蓝配鸡2019-10-22有个疑问: same origin policy不是确保了不同域名时间不可以访问数据的吗? 那第三方站点如何拿到cookie和session? 谢谢老师🙏
作者回复: 如果是CSRF攻击,那么黑客是拿不到受害者站点数据的。 但是黑客会在他的A站点中调用受害者B站点的http接口,这些接口可以是转账,删帖或者设置等。 这个过程中你需要注意一点,在黑客A站点中调用受害者B站点的http接口时,默认情况下,浏览器依然会把受害者的Cookie等信息数据发送到受害者的B站点,【注意这里并不是黑客的A站点】。 如果B站点存在漏洞的话,那么黑客就会攻击成功,比如将受害者的金币转出去了! 这样解释不知道问你清楚了没有?
共 5 条评论12 - 江谢木2019-11-29CSRF TOKEN类似于cookie, 都是存储用户信息,而此用户信息只存储在当前你请求的站点,而不是浏览器,所以不同的标签页面,或不同次的请求是不共享此用户信息的,所以规避了cookie所带来的的漏洞,老师,我这样理解对?
作者回复: 是的,针对于请求的,比如同一个浏览器打开两个相同页面,那么服务器为这两个页面生成的csrf token都是不同的
共 5 条评论10 - LIKE2020-06-231.CSRF是什么: 跨域请求伪造,通过第三方站点模拟用户请求行为 2.如何防范CSRF攻击: 本质就是识别客户端操作是否是用户本人操作 1>.业务上针对重要操作,需要再次验证,如短信验证码等,确保你是你 2>.公司内部做好文档管理:源码、接口文档等,减少信息泄露 3>.服务端针对cookie、session等敏感头信息设置samesite 4>.敏感接口数据采用加密传输、新增时效性或随机参数,增加请求信息不确定性,比如:CSRF Token参数展开9
- Chao2019-10-22chrome 默认启用 SameSite 了8
- 田2021-01-26终于搞懂csrf了(之前看掘金、看书没有示例),学习网络要结合事例,有了事例就能通俗易懂3
- lee2019-11-18在前后端分离的项目里面,是不是服务器端设置了access-control-allow-arigin只允许受信任的站点访问接口也可以防止CSRF攻击?共 2 条评论3
- 昵称2020-07-26目前为止比较好的防止csrf策略 1:不用cookie,登录态改用token,这样就不会有csrf攻击; 2:重要接口加验证参数:如短信验证码、谷歌验证码验证。即使它发起请求了,没有用户本身的手机验证码、谷歌验证码也通过不了这次请求。2
- Xx2021-03-29最后总结里的这段 "为了解决这些问题,我们引入了 CSP 来限制页面任意引入外部资源,引入了 HttpOnly 机制来禁止 XMLHttpRequest 或者 Fetch 发送一些关键 Cookie,引入了 SameSite 和 Origin 来防止 CSRF 攻击。" 好像不太正确? HttpOnly不是用来限制除Http之外的渠道来获取cookie吗? SameSite属性才是用来限制Ajax请求对于cookie的权限的吧?展开1
- 不二2020-12-30希望老师帮忙解答一下,疑问点是,发起csrf攻击,为什么一定要用户跳转到第三方页面,再请求当前域名的请求,感觉直接结合XSS不更好?利用XSS在浏览器端注入恶意代码,当然恶意代码的内容就是直接发起请求,例如转账的例子,直接在恶意代码就是转账到指定用户,这样感觉也可以呀。共 1 条评论1
- 爱看书的蜗牛2020-01-19“如果是从第三方站点发出的请求,那么将无法获取到 CSRF Token 的值,所以即使发出了请求”要获得这个token应该很容易吧,抓包就行啊共 3 条评论1
- -_-|||2019-12-17"如果是从第三方站点发起的请求,那么需要浏览器禁止发送某些关键 Cookie 数据到服务器;",如果是第三方网站,还会有被攻击网站的cookie吗,域名不一样,应该没有吧。1
- 可笑的霸王2019-10-23老师,关于Referrer服务器验证不太稳定可以详细解释下吗,因为我看到Referrer-Policy也可以设置为origin,达到Origin类似的效果1
- Geek_115bc82022-05-02什么是 CSRF 攻击? 就是用户点击了黑客的连接,跳转到黑客的网站,然后该网站有第三方网站的连接,如果用户浏览器此时有该第三方网站的未过期的cookie,那么将被发送。用来做一些转账的危险操作。 在开发项目过程中应该如何防御 CSRF 攻击? 1. 通过设置cookie samesite: strict。阻止用户通过链接跳转来发送cookie。 2. 因为发送请求,都会携带origin, referer头字段来表示发送方的域名。服务器进行验证。 3. 通过颁发token,验证用户身份。展开1
- JC.彦2022-02-18实施CSRF攻击需要3个条件: 1. 目标站点存在CSRF漏洞 2. 用户登录过目标站点,且在浏览器有登录信息。 3. 需要用户打开第三方站点 这里的CSRF漏洞是什么漏洞?展开
- Geek_cd4e2d2022-01-28提示一下,攻击者内部页面通过img标签访问接口不存在同源策略1
- lynnli2021-12-14老师的课讲的真的很好,受益匪浅值得多看几遍,希望老师有时间可以出本浏览器渲染原理方面的书,市面上没有这类书,都是涉及一点点这方面的知识,现在还没有系统总结浏览器渲染原理的书本
- 了不起的小六先生🌊2021-12-13CSRF攻击叫做跨站请求伪造,是指用户在登录了一个安全网站后会存储用户登录态在cookie中,此时黑客诱导用户点击恶意链接(可能是点击事件、也可能是恶意网站)来做一些恶意操作