安全攻防技能30讲
何为舟
前微博安全研发负责人
立即订阅
2935 人已学习
课程目录
已更新 12 讲 / 共 30 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 别说你没被安全困扰过
免费
安全基础概念 (5讲)
01 | 安全的本质:数据被窃取后,你能意识到问题来源吗?
02 | 安全原则:我们应该如何上手解决安全问题?
03 | 密码学基础:如何让你的密码变得“不可见”?
04 | 身份认证:除了账号密码,我们还能怎么做身份认证?
05 | 访问控制:如何选取一个合适的数据保护方案?
Web安全 (6讲)
06 | XSS:当你“被发送”了一条微博时,到底发生了什么?
07 | SQL注入:明明设置了强密码,为什么还会被别人登录?
08 | CSRF/SSRF:为什么避免了XSS,还是“被发送”了一条微博?
09 | 反序列化漏洞:使用了编译型语言,为什么还是会被注入?
10 | 信息泄漏:为什么黑客会知道你的代码逻辑?
11 | 插件漏洞:我的代码看起来很安全,为什么还会出现漏洞?
安全攻防技能30讲
登录|注册

08 | CSRF/SSRF:为什么避免了XSS,还是“被发送”了一条微博?

何为舟 2019-12-25
你好,我是何为舟。
前面我们讲了 2 种常见的 Web 攻击:XSS 和 SQL 注入。它们分别篡改了原始的 HTML 和 SQL 逻辑,从而使得黑客能够执行自定义的功能。那么除了对代码逻辑进行篡改,黑客还能通过什么方式发起 Web 攻击呢?
我们还是先来看一个例子。在平常使用浏览器访问各种网页的时候,是否遇到过,自己的银行应用突然发起了一笔转账,又或者,你的微博突然发送了一条内容?
在我们学习 XSS 之后,你可能会联想到,这是银行或者微博中出现了某个 XSS 漏洞。但问题是,你今天并没有访问过银行或者微博的页面,所以并没有“被 XSS”的机会。这时,你想到,会不会是你今天访问的其他网页里存在一些恶意的攻击,实现了你不知道的转账和发博行为呢?好了,你肯定很想知道黑客究竟是怎么做到的,那你不妨先自己思考一下,写出几个可能的答案,然后跟着我开始学习今天的内容!

CSRF 攻击是如何产生的?

我们几乎每天都要用到浏览器,我们的信息也会被浏览器“保存”。那我们首先来看一下,浏览器是如何保存你的身份信息的。
当我们在访问一个 Web 页面的时候,并不是我们自己去获取页面信息,而是浏览器去获取了这些信息,并将它们进行了展示。这就说明,你允许浏览器代表你去和 Web 的服务端进行交互。为了能够准确地代表你的身份,浏览器通常会在 Cookie 中存储一些必要的身份信息。所以,在我们使用一个网页的时候,只需要在首次访问的时候登录就可以了。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《安全攻防技能30讲》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(15)

  • tt
    首先向老师请教一个问题: 从hacker.com向bank.com发起HTTP请求不会遇到同源策略的限制么?

    其次谈谈自己对CSRF的理解。

    CSRF攻击的两个基本条件:使用cookie进行身份认证,接口调用参数不包含任何隐私信息。我的理解是一旦身份(即cookie)被窃取,因为接口参数不包含任何隐私信息和一次性信息(如nounce),本质上黑客执行的是一次重放攻击。

    一次性或随机性信息包括CSRF Token,也包括不在浏览器控制范围之内的信息,如独立的支付密码。

    回到用户认证的三个层次,除了Cookie这个能证明你是谁的东西之外,还要问用户你拥有什么?(比如支付密码或电子口令牌的口令)

    此外,一次性或随机信息是针对攻击者而言的。只要攻击者无法猜测到的信息,都应该被使用,就像SSRF防护中,内网的接口服务也需要对请求进行验证。

    通过这一课,对于接口设计的认知更全面了。

    作者回复: 会,所以是通过form.submit的POST形式,跳转过去的。黑客并拿不到返回的结果。

    2019-12-25
    1
    3
  • 瑞泉
    老师,csrf xss sql注入这些Web安全有没有比较好的测试工具推荐?后续课程中会有工具介绍吗?

    作者回复: 你好,感谢你的留言。xss可以用beef。sql注入可以用sqlmap。csrf好像没听说过,从原理上来说,也不容易做自动化的检测。
    这类工具主要是如何发起攻击,不是本专栏的重点,因此不会做介绍,感兴趣可以自行了解。

    2019-12-29
    1
  • LEON
    请教老师一个问题,通过CSRF token 来进行防护的话,有没有可能黑客通过自己转账确认CSRF token的位置或者标识,然后进行CSRF模拟表单进行提交的时候,通过JS脚本把CSRF token取出来,加在黑客模拟的表单中发送给server。从而造成CSRF token 防护失效?
    谢谢老师

    作者回复: CSRF token每个人每次请求都不一样,提前拿没有意义。如果黑客能够拿到用户的token,说明已经通过XSS等控制了用户的浏览器,则没有CSRF的意义了。

    2019-12-25
    1
  • 小晏子
    目前还没遇到过CSRF和SSRF的攻击,首先对于CSRF攻击,主要是使用CSRF-token进行防护的,这个很多web框架都提供了现成的模块可供使用。对于SSRF主要是用了白名单和接口认证的方式,文中提到的一个方案:全部使用POST,也考虑过,可是很多人认为这种方式可奇怪,不好理解,所以就没用。
    这里也请教下老师,接口全部使用POST请求的这种方式在业界是否用的普遍?

    作者回复: 敏感的上行操作全部使用POST,既符合GET和POST本身的设计初衷,也能够提升安全性,所以还是挺普遍的。

    2019-12-25
    1
  • Middleware
    尽量使用 POST 请求方式,似乎不太好吧?有违 RESTFul

    作者回复: 嗯,有些绝对了。应该是上行操作都用POST

    2019-12-25
    1
  • ZeroIce
    老师我有个问题不太懂:现在很多接口安全机制,不可能仅仅是直接访问一个接口而不带header验证(例如:cookie)就可以成功。不需要验证,还不如直接通过postman直接请求呢。这样子的话黑客怎样实施csrf?用户身份(cookie或token)黑客怎样添加到表单里面?

    作者回复: 用浏览器发起请求,会自动带上cookie的。

    2019-12-25
    1
  • 小老鼠
    csrf经常遇到,ssrf第一次听到。我用过django的csrfmiddware控件,利用的就是csrftoken,由于我作自动化测试的,在作接口测试的时候,发现只要把csrftoken的值与form中的csrfmiddlertoken的hidden类型值保持一致就可以通过了。我发现cdrftoken是不安全的。
    2019-12-31
  • leslie
    CSRF的防御方式算是提前学习到了:正准备做相关的事情,之前不理解为何现在许多现金支付为何越来越多的使用手机验证;其实目的就是避免该环节用户的密码和支付密码被保存从而被利用。

    作者回复: 是的。支付密码的意义,除了防CSRF这类攻击,其实也是一定程度上强化用户对密码的保护意识。支付密码其实强调了说这个密码和普通密码意义不一样,因此用户一般只在脑子里面记忆,不会轻易写下来。

    2019-12-30
  • 早起不吃虫
    老师总结的很好,不过由于篇幅所限,讲的稍显不够详细,所以看到评论区有很多相关的疑问,建议增加篇幅,哈哈😄

    作者回复: 篇幅确实有限,对很多内容进行了删减。有不明白的欢迎留言讨论~

    2019-12-26
  • 仰望星空
    如果csrf toke也存储在cookie里是不是就不安全了,但奇怪的是spring security 框架就是把card token存储在cookie里返回给浏览器的,似乎也没人说不安全。

    作者回复: 存cookie里面是不安全了。你说的card token是干啥用的?不太了解。

    2019-12-25
    1
  • LEON
    感觉XSS攻击和CSRF攻击很像,这两种攻击比较起来具体有什么关系和区别吗?

    作者回复: XSS攻击发生在当前域名,CSRF攻击发生在其他域名。总体来说,XSS攻击能够覆盖CSRF的危害,但XSS难度更好,传播能力更弱。

    2019-12-25
  • 想请假老师个问题,前后端分离项目中,怎样做csrf?如果通过接口返回,是不是黑客也可以额外做一次接口请求呢?

    作者回复: 做好同源保护,黑客没办法在其他域名下,拿到用户在当前域名下的接口返回结果。然后,把token和session等会话标识绑定即可。

    2019-12-25
  • alan
    讲得太好了!
    2019-12-25
  • Cy23
    CSRF了解了,SSRF攻击原理理解了,SSRF发起攻击的细节还有很多不了解的,需要扩展学习下

    作者回复: SSRF其实就是看,通过HTTP请求,都能从内网获取些什么信息。

    2019-12-25
  • ZeroIce
    上一条留言:
    老师我有个问题不太懂:现在很多接口安全机制,不可能仅仅是直接访问一个接口而不带header验证(例如:cookie)就可以成功。不需要验证,还不如直接通过postman直接请求呢。这样子的话黑客怎样实施csrf?用户身份(cookie或token)黑客怎样添加到表单里面

    另外一个问题:假如我的是Authorization。 header头部验证?而不是cookie(浏览器每个请求都带上cookie)

    作者回复: 浏览器发起请求,会自动带上这个请求域名的cookie,所以黑客不需要主动添加。。。。看浏览器怎么处理认证了,我理解Basic Auth浏览器应该也是会自动带上的,吧?

    2019-12-25
收起评论
15
返回
顶部