08 | CSRF/SSRF:为什么避免了XSS,还是“被发送”了一条微博?
08 | CSRF/SSRF:为什么避免了XSS,还是“被发送”了一条微博?
讲述:何为舟
时长18:27大小14.79M
CSRF 攻击是如何产生的?
通过 CSRF 攻击,黑客能做什么?
如何进行 CSRF 防护?
SSRF:同样的原理,发生在服务端又会发生什么?
通过 SSRF 攻击,黑客能做什么?
1. 内网探测
2. 文件读取
如何进行 SSRF 防护?
总结
思考题
赞 11
提建议
精选留言(29)
- tt2019-12-25首先向老师请教一个问题: 从hacker.com向bank.com发起HTTP请求不会遇到同源策略的限制么? 其次谈谈自己对CSRF的理解。 CSRF攻击的两个基本条件:使用cookie进行身份认证,接口调用参数不包含任何隐私信息。我的理解是一旦身份(即cookie)被窃取,因为接口参数不包含任何隐私信息和一次性信息(如nounce),本质上黑客执行的是一次重放攻击。 一次性或随机性信息包括CSRF Token,也包括不在浏览器控制范围之内的信息,如独立的支付密码。 回到用户认证的三个层次,除了Cookie这个能证明你是谁的东西之外,还要问用户你拥有什么?(比如支付密码或电子口令牌的口令) 此外,一次性或随机信息是针对攻击者而言的。只要攻击者无法猜测到的信息,都应该被使用,就像SSRF防护中,内网的接口服务也需要对请求进行验证。 通过这一课,对于接口设计的认知更全面了。展开
作者回复: 会,所以是通过form.submit的POST形式,跳转过去的。黑客并拿不到返回的结果。
共 2 条评论12 - LEON2019-12-25请教老师一个问题,通过CSRF token 来进行防护的话,有没有可能黑客通过自己转账确认CSRF token的位置或者标识,然后进行CSRF模拟表单进行提交的时候,通过JS脚本把CSRF token取出来,加在黑客模拟的表单中发送给server。从而造成CSRF token 防护失效? 谢谢老师
作者回复: CSRF token每个人每次请求都不一样,提前拿没有意义。如果黑客能够拿到用户的token,说明已经通过XSS等控制了用户的浏览器,则没有CSRF的意义了。
共 5 条评论8 - ZeroIce2019-12-25老师我有个问题不太懂:现在很多接口安全机制,不可能仅仅是直接访问一个接口而不带header验证(例如:cookie)就可以成功。不需要验证,还不如直接通过postman直接请求呢。这样子的话黑客怎样实施csrf?用户身份(cookie或token)黑客怎样添加到表单里面?
作者回复: 用浏览器发起请求,会自动带上cookie的。
共 3 条评论5 - 瑞泉2019-12-29老师,csrf xss sql注入这些Web安全有没有比较好的测试工具推荐?后续课程中会有工具介绍吗?
作者回复: 你好,感谢你的留言。xss可以用beef。sql注入可以用sqlmap。csrf好像没听说过,从原理上来说,也不容易做自动化的检测。 这类工具主要是如何发起攻击,不是本专栏的重点,因此不会做介绍,感兴趣可以自行了解。
4 - 叮当 2020-07-21老师,对于CSRF和XSS攻击的区别,我还是不太清楚,两者都是窃取信息来仿冒用户操作,看评论说一个发生在当前域名,一个是其他域名,对这一点能否讲的详细一点,比如为什么XSS只能发生在当前域名呢。除了这个不同,还有其他不同点吗?谢谢老师!
作者回复: 假设目标是A网站,xss相当于篡改了A的html,然后执行js。csrf相当于从B向A发起请求,A的html并不会受到影响。
3 - 稳2019-12-25想请假老师个问题,前后端分离项目中,怎样做csrf?如果通过接口返回,是不是黑客也可以额外做一次接口请求呢?
作者回复: 做好同源保护,黑客没办法在其他域名下,拿到用户在当前域名下的接口返回结果。然后,把token和session等会话标识绑定即可。
3 - ZeroIce2019-12-25上一条留言: 老师我有个问题不太懂:现在很多接口安全机制,不可能仅仅是直接访问一个接口而不带header验证(例如:cookie)就可以成功。不需要验证,还不如直接通过postman直接请求呢。这样子的话黑客怎样实施csrf?用户身份(cookie或token)黑客怎样添加到表单里面 另外一个问题:假如我的是Authorization。 header头部验证?而不是cookie(浏览器每个请求都带上cookie)展开
作者回复: 浏览器发起请求,会自动带上这个请求域名的cookie,所以黑客不需要主动添加。。。。看浏览器怎么处理认证了,我理解Basic Auth浏览器应该也是会自动带上的,吧?
共 2 条评论3 - 烫烫烫2020-12-13老师,关于XSS和CSRF,我是这么理解的: 1、如果黑客发现用户把验证信息放在session里,且没有其它校验的话,就可以发起CSRF攻击,即,构造一个恶意URL,诱导用户点击,然后跳转到目标网页发起请求; 2、更进一步,如果黑客发现XSS漏洞,可在目标网页上构造恶意参数,诱导用户点击,从而修改HTML页面,相当于一定程度上控制了用户的网页。此时,黑客不仅可以拿到session,还可以拿到localStorage等数据,任意发起请求; 以上,不知是否正确,望老师答复,谢谢展开
作者回复: 挺正确的。csrf不需要页面漏洞,发起攻击和扩散的成本低。但是xss相当于控制整个网页,危害程度更大。
2 - 小晏子2019-12-25目前还没遇到过CSRF和SSRF的攻击,首先对于CSRF攻击,主要是使用CSRF-token进行防护的,这个很多web框架都提供了现成的模块可供使用。对于SSRF主要是用了白名单和接口认证的方式,文中提到的一个方案:全部使用POST,也考虑过,可是很多人认为这种方式可奇怪,不好理解,所以就没用。 这里也请教下老师,接口全部使用POST请求的这种方式在业界是否用的普遍?
作者回复: 敏感的上行操作全部使用POST,既符合GET和POST本身的设计初衷,也能够提升安全性,所以还是挺普遍的。
2 - Middleware2019-12-25尽量使用 POST 请求方式,似乎不太好吧?有违 RESTFul
作者回复: 嗯,有些绝对了。应该是上行操作都用POST
2 - 曙光2020-03-13问题:1 CSRF Token,服务器发送和客户端发送的CSRF Token是一样的么?如果一样,黑客如果截获了CSRF Token,再发给服务器岂不是转账成功了?二次密码输入也是同理,只要知道二次密码是什么,这个方案也形同虚设了。 问题2:SSRF的服务端验证,是不是通过对称密钥或非对称密钥实现?即请求其他服务接口时,需要拼接一个唯一标识的内部密码字段,类似CSRF Token。
作者回复: 1、关键就在于csrf发生在用户端,而不是黑客端,所以黑客拿不到任何请求的信息。如果能截获请求信息或者知道密码,就完全没必要发起csrf了,直接黑客自己发请求就好了。 2、不需要加密,一个简单token都是足够的。就是确保不是任意的请求都能够被服务端接收,而是需要通过部分黑客掌握不到的信息进行认证。
1 - 律飛2020-01-04对于CSRF攻击,主要是使用CSRF-token进行防护的,这个很多web框架都提供了现成的模块可供使用;对于支付、修改用户密码等关键操作采用手机验证码等二次验证。 对于SSRF主要是用白名单和接口认证的方式,还可以采用协议限制。 请教老师,作为运维人员,除了用工具扫描漏洞外,在日常运维监控方面可以做些什么来发现是否有入侵事件呢?
作者回复: 后面会讲到一些防护工具。Web安全相关的主要就是WAF了
2 - leslie2019-12-30CSRF的防御方式算是提前学习到了:正准备做相关的事情,之前不理解为何现在许多现金支付为何越来越多的使用手机验证;其实目的就是避免该环节用户的密码和支付密码被保存从而被利用。
作者回复: 是的。支付密码的意义,除了防CSRF这类攻击,其实也是一定程度上强化用户对密码的保护意识。支付密码其实强调了说这个密码和普通密码意义不一样,因此用户一般只在脑子里面记忆,不会轻易写下来。
1 - 仰望星空2019-12-25如果csrf toke也存储在cookie里是不是就不安全了,但奇怪的是spring security 框架就是把card token存储在cookie里返回给浏览器的,似乎也没人说不安全。
作者回复: 存cookie里面是不安全了。你说的card token是干啥用的?不太了解。
共 4 条评论1 - LEON2019-12-25感觉XSS攻击和CSRF攻击很像,这两种攻击比较起来具体有什么关系和区别吗?
作者回复: XSS攻击发生在当前域名,CSRF攻击发生在其他域名。总体来说,XSS攻击能够覆盖CSRF的危害,但XSS难度更好,传播能力更弱。
共 2 条评论1 - 阿白2021-08-09对于csrf浏览器为什么不直接应用同源策略阻止跨域发送post请求呢?感觉跨域post的应用场景在我的经验里还没出现,老师可以分享一下这个的应用场景吗?
- 李文彬2021-02-08如果是服务(都是内网IP)之间的接口调用,一般会做什么校验?因为接口之间调用很多,目前没有做校验,感觉不是很安全~
- 吕志勇2020-05-23好熟悉的名词,但是今天才知道是怎么回事,谢谢
- Hello World2020-05-14开启浏览器samesite属性对于csrf来说也是很好的防护
- COOK2020-03-29ssrf通过服务端代理攻击,加白名单,限制协议或方法