安全攻防技能 30 讲
何为舟
前微博安全研发负责人
34681 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 41 讲
开篇词 (1讲)
安全攻防技能 30 讲
15
15
1.0x
00:00/00:00
登录|注册

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

请求端限制
协议限制
白名单限制
内网穿透
服务端发起伪造请求
二次验证
CSRF Token
伪造请求
通过恶意JavaScript脚本窃取身份信息
浏览器保存身份信息
防护
产生
防护
产生
SSRF
CSRF
总结

该思维导图由 AI 生成,仅供参考

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

CSRF 攻击是如何产生的?

我们几乎每天都要用到浏览器,我们的信息也会被浏览器“保存”。那我们首先来看一下,浏览器是如何保存你的身份信息的。
当我们在访问一个 Web 页面的时候,并不是我们自己去获取页面信息,而是浏览器去获取了这些信息,并将它们进行了展示。这就说明,你允许浏览器代表你去和 Web 的服务端进行交互。为了能够准确地代表你的身份,浏览器通常会在 Cookie 中存储一些必要的身份信息。所以,在我们使用一个网页的时候,只需要在首次访问的时候登录就可以了。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

CSRF攻击利用浏览器存储用户身份信息的特性,通过伪造请求模拟用户发起带有认证信息的请求,可能导致未授权操作。相比XSS,CSRF攻击传播和成本更低,用户难以察觉。防范方法包括采用CSRF Token和二次验证。此外,文章介绍了SSRF攻击,利用服务端代理请求的功能,通过提交内网地址实现对内网任意服务的访问,可能导致严重后果。防范SSRF攻击的方法包括白名单限制、协议限制和请求端限制。总结CSRF和SSRF攻击产生于正常业务功能逻辑中,加强接口的安全验证是防范的关键。文章提供了详细的攻击方式和防护手段,对于保障网络安全至关重要。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《安全攻防技能 30 讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(30)

  • 最新
  • 精选
  • tt
    首先向老师请教一个问题: 从hacker.com向bank.com发起HTTP请求不会遇到同源策略的限制么? 其次谈谈自己对CSRF的理解。 CSRF攻击的两个基本条件:使用cookie进行身份认证,接口调用参数不包含任何隐私信息。我的理解是一旦身份(即cookie)被窃取,因为接口参数不包含任何隐私信息和一次性信息(如nounce),本质上黑客执行的是一次重放攻击。 一次性或随机性信息包括CSRF Token,也包括不在浏览器控制范围之内的信息,如独立的支付密码。 回到用户认证的三个层次,除了Cookie这个能证明你是谁的东西之外,还要问用户你拥有什么?(比如支付密码或电子口令牌的口令) 此外,一次性或随机信息是针对攻击者而言的。只要攻击者无法猜测到的信息,都应该被使用,就像SSRF防护中,内网的接口服务也需要对请求进行验证。 通过这一课,对于接口设计的认知更全面了。

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

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

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

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

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

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

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

    2019-12-25
    3
    6
  • 叮当 
    老师,对于CSRF和XSS攻击的区别,我还是不太清楚,两者都是窃取信息来仿冒用户操作,看评论说一个发生在当前域名,一个是其他域名,对这一点能否讲的详细一点,比如为什么XSS只能发生在当前域名呢。除了这个不同,还有其他不同点吗?谢谢老师!

    作者回复: 假设目标是A网站,xss相当于篡改了A的html,然后执行js。csrf相当于从B向A发起请求,A的html并不会受到影响。

    2020-07-21
    4
  • 烫烫烫
    老师,关于XSS和CSRF,我是这么理解的: 1、如果黑客发现用户把验证信息放在session里,且没有其它校验的话,就可以发起CSRF攻击,即,构造一个恶意URL,诱导用户点击,然后跳转到目标网页发起请求; 2、更进一步,如果黑客发现XSS漏洞,可在目标网页上构造恶意参数,诱导用户点击,从而修改HTML页面,相当于一定程度上控制了用户的网页。此时,黑客不仅可以拿到session,还可以拿到localStorage等数据,任意发起请求; 以上,不知是否正确,望老师答复,谢谢

    作者回复: 挺正确的。csrf不需要页面漏洞,发起攻击和扩散的成本低。但是xss相当于控制整个网页,危害程度更大。

    2020-12-13
    3
  • 律飛
    对于CSRF攻击,主要是使用CSRF-token进行防护的,这个很多web框架都提供了现成的模块可供使用;对于支付、修改用户密码等关键操作采用手机验证码等二次验证。 对于SSRF主要是用白名单和接口认证的方式,还可以采用协议限制。 请教老师,作为运维人员,除了用工具扫描漏洞外,在日常运维监控方面可以做些什么来发现是否有入侵事件呢?

    作者回复: 后面会讲到一些防护工具。Web安全相关的主要就是WAF了

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

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

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

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

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

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

    2019-12-25
    2
收起评论
显示
设置
留言
30
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部