CSRF 问题 求指教

2017-03-04 13:09:56 +08:00
 xu33

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

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

这样一来不还是防不住吗

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

2219 次点击
所在节点   科技
18 条回复
des
2017-03-04 13:21:47 +08:00
csrf 攻击者是弄不到 cookie 的,所以有 http only
gamexg
2017-03-04 14:14:16 +08:00
xxs 攻击才能够执行 js ,才有可能获得非 http only 的 js 。这个要求在所有输出的地方做转义。
xu33
2017-03-04 14:16:15 +08:00
@des 他通过 xss 注入得到了 cookie 然后用 csrf 执行用户操作
torbrowserbridge
2017-03-04 14:17:27 +08:00
@gamexg xss
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
2017-03-04 14:28:35 +08:00
@gamexg 所以这和 CSRF 有什么关系呢???你分得清什么是 CSRF ,什么是 XSS 吗??
xu33
2017-03-04 14:30:09 +08:00
@gamexg
我的意思不是说攻击者在他的网站上内嵌你的提交请求
而是他通过某种手段 例如在路由层面 或者是用 xss 注入窃取了非 httponly 的 cookie
那么你做不做 csrf 防护都是没用的
gamexg
2017-03-04 14:39:57 +08:00
@des #6 不明白你的意思,上半截就是我理解的 csrf ,下半截是 xss 。 不是前端,承认把 xss 的名字打错了,但是感觉主要部分理解是没问题的。

@xu33 #7 这样就没意义了。能够拦截请求也就意味着密码都能够抓到,那么除了删 https 没其他好办法。
des
2017-03-04 14:48:54 +08:00
@gamexg
这样说吧,别人从后门( XSS )拿到你家的钥匙( cookie ),你却要怪前门的防盗门( token )不安全。
再者说都拿到你的钥匙了,还需要去弄 CSRF ??
再说了 CSRF 需要去访问你挂了脚本的网站,你以为这个很简单
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
2017-03-04 15:26:14 +08:00
楼主应该把事情搞混在一起了, CSRF 就是 CSRF , XSS 就是 XSS
XSS 的特征是攻击行为操作人知情, CSRF 的特征是攻击行为操作人不知情
因此在 CSRF 中,不知情的操作是无法替攻击者进行 XSS 攻击行为的

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

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

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

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

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

1. 不如思考为什么别人会拿到 cookie ,把防 XSS 做好, HTTPS 做好,既然 cookie 不会被拿到那就不用去思考这问题,这个事情本质和 CSRF 一点关系也没有
2. 不是不能做,最简单的比如 IP+UA 和 cookie 做下匹配校验

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/344850

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX