不懂就问: csrf 攻击的疑问

251 天前
 shermie

问题

首先,我是菜鸡,怀着学习的心态提问

xss 攻击者可以利用脚本读取浏览器的 cookie 信息发送到自己的服务器,然后加以利用,这一过程都是在用户登录的网站完成的,可以理解。

但是 csrf 攻击,是诱导已登录的用户点击钓鱼网站,这个过程已经不是同源的了,域名都不一样了,浏览器不会携带网站 A 的 cookie 信息到钓鱼网站 B ,那好像这也并不能构成信心泄漏,大佬解答一下

2305 次点击
所在节点    程序员
19 条回复
thinkershare
251 天前
我可以诱导你去访问我的网站,然后在我的网站发送一个请求你的网站的一个 GET&POST 请求,这个请求携带的是请求 URL 所在 origin 的 Cookie, 这个过程就是请求伪造。用户被欺骗用他自己的真实身份做了他不知道的事情。
lrwlf
251 天前
钓鱼网站 B 可以直接跳转到 A 网站的某个接口地址,或者通过 iframe 加载 A 网站的接口,这样构造的 GET 请求可以携带 cookie
SilentRhythm
251 天前
银行 A 网站,骗子 B 网站,浏览器有 A 网站的 cookie
SilentRhythm
251 天前
SilentRhythm
251 天前
点错了,续上
在 B 网站的页面上发起了对 A 网站的请求,如果 A 网站没有校验,是能通过的
8355
251 天前
是由钓鱼网站 B 带有恶意代码跳转回 A 网站的指定路径通过参数传递+浏览器自动获取本地 cookie 完成鉴权达成目的。
wonderfulcxm
251 天前
它最终目标 URL 还是 A ,比如从 B 提交一个表单到 A 的 URL ,如果没有限制,就会带上 A 的 cookie 。因为访问 A 网站就会带上 A 的 cookie 。
wangxiaoaer
251 天前
csrf 不是偷 cookie ,目标不是钓鱼网站,而是用户已经登陆的网站,用来偷偷模拟操作,这个操作可能很危险。
GeruzoniAnsasu
251 天前
哪有那么抽象,早年微博和贴吧的漏洞见过没,点进一个不正常的「病毒帖」后你会自动地在所有已关注的贴吧里都发一份一样的病毒帖子。


这个就是 CSRF. 只是伪造的用户行为是发帖。如果伪造上传下载文件或者修改什么私有资源的权限之类的行为,那破坏力能大得多。
wudiiiii
251 天前
关于浏览器安全,只要记着:
1. 本网站存储的信息恶意网站不能读写。(同源策略)
2. 恶意网站能够构造和发送任意参数的请求,而且 cookie 会自动携带。

CORS 策略只限制了跨域请求不能接收响应,但是请求还是可以发出去。
lybcyd
251 天前
例如 B 网站的一个伪造表单:
<form action="http://www.a.com/deleteAccount" method="post></form>

这个表单本身不违反同源策略,可以在用户不知道的情况下,通过用户已有的 cookie 进行一些很危险的操作。

为了防止类似的提交,通常的做法就是加上一个额外的隐藏 token 并进行校验,伪造的表单是无法获取到隐藏 token 的。像 Spring Security 这种框架一般都默认实现了 csrf token 。
xiaoxiaoming01
251 天前
在站点 B 调用站点 A 的同源接口时,
它默认不会带站点 B 的 cookie ,
但是会带站点 A 的 cookie 。
xiaoxiaoming01
251 天前
假设有站点 C ,它使用的接口 d 与它不同源,
那么在站点 C 调用 d 接口时默认不带 cookie ,

如果你后来又部署了一个站点 D ,站点 D 与接口 d 同源,
那么,此时在站点 C 调用接口 d 时,它会默认带 D 站点的 cookie 。
mdn
251 天前
xss 是 盗用 用户 cookie
csrf 是 冒用 用户 cookie
xhr 和 fetch 不能随意跨站请求资源,需要通过 CORS 策略来支持其跨域,但是 页面中可以引用任意第三方资源,比如
1. <img src="https://www.example.com/deleteAccount"> ,
2. <form action="https://www.example.com/deleteAccount" method=POST>
   <input type="hidden" name="account" value="admin" />
   <input type="submit" value="抢红包" />
</form>
3. <a href="https://www.example.com/deleteAccount" taget="_blank">抢红包<a/>

用户只要登录过 example.com 网站,在第三方网站触发上面任意一种,都会被恶意删除账号
lalalaqwer
251 天前
@wudiiiii
CORS 只是简单请求能发不一定能接收,非简单请求是浏览器直接拦截发不出去的
ksc010
251 天前
你应该是 CSRF XSS 闹混了
flyqie
251 天前
csrf 攻击造成数据泄露一般不是 csrf 自身造成的,或者说 csrf 攻击本身造不成数据泄露。


不要拿 xss 攻击套 csrf 攻击,他俩效果不一样,csrf 攻击本身是啥情况前几楼举的例子已经很清楚了。
shermie
250 天前
谢谢大佬们 现在是明白了
euronx
250 天前
另外现在有 same site cookie 限制了

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

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

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

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

© 2021 V2EX