V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xu33
V2EX  ›  科技

CSRF 问题 求指教

  •  
  •   xu33 · 2017-03-04 13:09:56 +08:00 · 2095 次点击
    这是一个创建于 2582 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一般说防止 csrf 攻击 服务端下发 token 到表单里 提交时进行比对即可防住

    但是如果攻击者盗取了 cookie 他通过 cookie 登陆网站 不是也得到了 token 吗

    这样一来不还是防不住吗

    还是我哪里理解错了 求大神指点

    18 条回复    2017-03-05 18:16:54 +08:00
    des
        1
    des  
       2017-03-04 13:21:47 +08:00 via Android
    csrf 攻击者是弄不到 cookie 的,所以有 http only
    gamexg
        2
    gamexg  
       2017-03-04 14:14:16 +08:00
    xxs 攻击才能够执行 js ,才有可能获得非 http only 的 js 。这个要求在所有输出的地方做转义。
    xu33
        3
    xu33  
    OP
       2017-03-04 14:16:15 +08:00
    @des 他通过 xss 注入得到了 cookie 然后用 csrf 执行用户操作
    torbrowserbridge
        4
    torbrowserbridge  
       2017-03-04 14:17:27 +08:00 via iPhone
    @gamexg xss
    gamexg
        5
    gamexg  
       2017-03-04 14:21:09 +08:00
    这么说吧, csrf 攻击是这样的:

    1.网站删除文章功能是个 post 请求
    2.攻击者构建一个网页,网页自动提交删除的那个 post 请求,现在的 html 规范是允许这种提交的。
    3.引诱管理员访问这个网页。
    4.这个网页自动提交了删除的那个 post 请求。按照浏览器规则,这个请求会带着被攻击网站的 cookie ,是以管理员的身份提交的。
    5.如果没有做 csrf 防护,那么这个删除请求会被执行。而如果做了防护,攻击者是无法获得 token ,删除请求不会被执行。

    xxs 可以看作是前端的注入,输出用户提交的内容未作过滤,造成访问时会自行攻击者的 js ,那么这时候攻击者是可以获得和网页 js 同一权限
    。虽然 http omly 可以预防获得 cookie ,但是攻击者是可以以用户身份执行操作的,例如如果时管理员中招,可以删帖等。如果时普通用户中招,可以添加关注,可以继续向其他好友发起攻击进行传播等。
    des
        6
    des  
       2017-03-04 14:28:35 +08:00
    @gamexg 所以这和 CSRF 有什么关系呢???你分得清什么是 CSRF ,什么是 XSS 吗??
    xu33
        7
    xu33  
    OP
       2017-03-04 14:30:09 +08:00
    @gamexg
    我的意思不是说攻击者在他的网站上内嵌你的提交请求
    而是他通过某种手段 例如在路由层面 或者是用 xss 注入窃取了非 httponly 的 cookie
    那么你做不做 csrf 防护都是没用的
    gamexg
        8
    gamexg  
       2017-03-04 14:39:57 +08:00
    @des #6 不明白你的意思,上半截就是我理解的 csrf ,下半截是 xss 。 不是前端,承认把 xss 的名字打错了,但是感觉主要部分理解是没问题的。

    @xu33 #7 这样就没意义了。能够拦截请求也就意味着密码都能够抓到,那么除了删 https 没其他好办法。
    des
        9
    des  
       2017-03-04 14:48:54 +08:00
    @gamexg
    这样说吧,别人从后门( XSS )拿到你家的钥匙( cookie ),你却要怪前门的防盗门( token )不安全。
    再者说都拿到你的钥匙了,还需要去弄 CSRF ??
    再说了 CSRF 需要去访问你挂了脚本的网站,你以为这个很简单
    gamexg
        10
    gamexg  
       2017-03-04 15:04:12 +08:00
    @des #9 不明白你的意思。

    >这样说吧,别人从后门( XSS )拿到你家的钥匙( cookie ),你却要怪前门的防盗门( token )不安全。
    不明白从那里理解出来的 怪 token 不安全。
    说的是 5 楼?那里已经说了网站如果使用了 http only cookie 。那么就不能按照常规的 xss 攻击只获取 cookie 了,这样获得的 cookie 是不齐全的,攻击者拿到了导入本地浏览器也无法使用。不过这时候是可以通过 js 来做那几个操作的。

    >再说了 CSRF 需要去访问你挂了脚本的网站,你以为这个很简单

    这个难度是有,但是并不是很大,例如在 v2 发个新闻,说是 google 被人脱裤了,留个网址,信不信会有一批人点进去看? 出个热点有时候能够看到评论被 V2EX 刷屏。 

    另外对于 get 请求就可以执行的,可以直接作为贴图,点开帖子就会中招。
    otakustay
        11
    otakustay  
       2017-03-04 15:26:14 +08:00
    楼主应该把事情搞混在一起了, CSRF 就是 CSRF , XSS 就是 XSS
    XSS 的特征是攻击行为操作人知情, CSRF 的特征是攻击行为操作人不知情
    因此在 CSRF 中,不知情的操作是无法替攻击者进行 XSS 攻击行为的

    所以,防 XSS 就防 XSS ,防 CSRF 就防 CSRF ,不用把 2 个事情混一起想太复杂,两边都做好防御就行了
    crab
        12
    crab  
       2017-03-04 15:29:23 +08:00
    有 cookie 了,还需要 token 干啥啊。
    xu33
        13
    xu33  
    OP
       2017-03-04 15:40:11 +08:00
    @otakustay

    我没有搞混 但是听到有人说 程序必须做到 即使有人拿到我们用户的 cookie

    也无法进行一些危险操作 我觉得这貌似是不可能
    ksc010
        14
    ksc010  
       2017-03-04 15:57:18 +08:00
    @xu33 拿到用户 cookie 有这么两种方式
    1. 网络层劫持(通过运营商网关、本地木马等)
    2. XSS 跨站脚本

    对于上面两种情况 若网站没有对“危险操作”有其他层面的二次校验(密码、手机短信等)的话
    是不大可能防住的
    nfroot
        15
    nfroot  
       2017-03-04 16:56:03 +08:00
    防 CSRF ,用 token
    防 XSS , 过滤用户提交的数据
    防中间人,上 HTTPS+HSTS
    防对方拿到用户 Cookie 后做危险操作 , 麻烦你重要操作做二次认证(比如短信,扫码,邮箱, QQ 、微信等其他设备方式的验证)

    还啥问题?感觉你是来 PK 的,不是来询问的。
    reb00ts
        16
    reb00ts  
       2017-03-04 19:52:47 +08:00
    楼主可以简单的这么理解吧, CSRF 是借 Cookie 去干坏事(实际并未拿到用户 Cookie ),而 XSS 是盗取 Cookie 干坏事。
    phx13ye
        17
    phx13ye  
       2017-03-05 09:20:36 +08:00 via iPhone
    mark
    otakustay
        18
    otakustay  
       2017-03-05 18:16:54 +08:00
    @xu33

    1. 不如思考为什么别人会拿到 cookie ,把防 XSS 做好, HTTPS 做好,既然 cookie 不会被拿到那就不用去思考这问题,这个事情本质和 CSRF 一点关系也没有
    2. 不是不能做,最简单的比如 IP+UA 和 cookie 做下匹配校验
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5297 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 09:11 · PVG 17:11 · LAX 02:11 · JFK 05:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.