• 李小白
    2019-10-22
    老师,我想请问一下,在浏览器打开第三方站点是如何拿到极客时间站点cookie的?第三方站点和极客时间的站点不同,存在同源策略,所以转账请求验证cookie也是不通过的,那么CSRF是如何攻击的呢?
     7
     8
  • 淡
    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的值。


    这样写不知道你明白没有,如果还有疑惑欢迎继续提问。

     2
     3
  • 許敲敲
    2019-10-22
    老师,这方面有比较好的资料或是书嘛?想多了解一下

    作者回复: 主要是根据这几年工作经验和浏览器文档、源码总结出来的,因为维护一个日活跃几千万的浏览器,能带来大量的流量,而流量就是金钱,因此我们的浏览器会遭受到各种类型的攻击,所以我们有很大一部分时间都是在处理攻击!

    当然为了写这个专栏,网上web安全相关的书籍我也买了好多,基本都看了一圈,但是有一些问题:
    第一是这些书籍都有一些年限了,里面的知识比较滞后!
    第二,大多数和前端关系不是太大
    第三,大多数写的比较零碎


    你们如果发现有好的web安全相关的书籍,也可以推荐下!

     1
     3
  • lee
    2019-11-18
    在前后端分离的项目里面,是不是服务器端设置了access-control-allow-arigin只允许受信任的站点访问接口也可以防止CSRF攻击?
    
     1
  • 蓝配鸡
    2019-10-22
    有个疑问:
    same origin policy不是确保了不同域名时间不可以访问数据的吗? 那第三方站点如何拿到cookie和session?

    谢谢老师🙏

    作者回复: 如果是CSRF攻击,那么黑客是拿不到受害者站点数据的。

    但是黑客会在他的A站点中调用受害者B站点的http接口,这些接口可以是转账,删帖或者设置等。

    这个过程中你需要注意一点,在黑客A站点中调用受害者B站点的http接口时,默认情况下,浏览器依然会把受害者的Cookie等信息数据发送到受害者的B站点,【注意这里并不是黑客的A站点】。

    如果B站点存在漏洞的话,那么黑客就会攻击成功,比如将受害者的金币转出去了!

    这样解释不知道问你清楚了没有?

     4
     1
  • 爱看书的蜗牛
    2020-01-19
    “如果是从第三方站点发出的请求,那么将无法获取到 CSRF Token 的值,所以即使发出了请求”要获得这个token应该很容易吧,抓包就行啊
    
    
  • 朙
    2019-12-24
    总感觉CSRF Token这么明目张胆地写在html里,也不安全呢。黑客是不能看到这个页面的内容吗?老师能讲讲什么情况下一个页面可以看到另一页面的内容,什么情况下不能吗?是不是XSS就可以拿到这个Token了
    
    
  • -_-_aaa
    2019-12-17
    "如果是从第三方站点发起的请求,那么需要浏览器禁止发送某些关键 Cookie 数据到服务器;",如果是第三方网站,还会有被攻击网站的cookie吗,域名不一样,应该没有吧。
    
    
  • 昆虫捕手
    2019-11-29
    CSRF TOKEN类似于cookie, 都是存储用户信息,而此用户信息只存储在当前你请求的站点,而不是浏览器,所以不同的标签页面,或不同次的请求是不共享此用户信息的,所以规避了cookie所带来的的漏洞,老师,我这样理解对?

    作者回复: 是的,针对于请求的,比如同一个浏览器打开两个相同页面,那么服务器为这两个页面生成的csrf token都是不同的

    
    
  • 可笑的霸王
    2019-10-23
    老师,关于Referrer服务器验证不太稳定可以详细解释下吗,因为我看到Referrer-Policy也可以设置为origin,达到Origin类似的效果
    
    
  • Chao
    2019-10-22
    chrome 默认启用 SameSite 了
    
    
我们在线,来聊聊吧