Web 开发的安全之旅 —— 攻击篇 - XSS - CSRF - Injection - Dos - 中间人攻击

生活中经常遇到诈骗的信息,Web开发中也会遇到很多安全的问题,这会危害到用户、公司、还有我们程序员自己(~要被送去祭天~)!!!下面分别从黑客与开发者的角度来看看网络安全的攻击防御

今天先来探索探索Web安全之攻击篇

XSS 跨站脚本攻击 Cross-Site Scripting

image.png

XSS就是 攻击者往页面中插入攻击脚本,对页面进行攻击

攻击者使用XSS,主要是利用了

  1. 开发者盲目信任用户提交的内容(比如带有恶意的字符串)
  2. 开发者直接把字符串生成DOM

这些恶意的代码可能是

  • document.write
  • element.innerHTML = anyString
  • SSR(user_data) // 伪码

XSS的一些特点

  1. 通常难以从UI上感知(暗地执行脚本)
  2. 窃取用户的敏感信息(cookie/token)
  3. 绘制UI(比如弹窗),诱骗用户点击/填写表单

举一个例子

image.png

服务端的两个接口:

submit会接收请求,将请求中的参数存入数据库中

render会从数据库中读取内容,写在HTML里,然后返回给用户

这里没有对用户提交的内容做任何过滤,如果我们是攻击者,可以这样进行攻击:数据使用一个script标签包裹,然后在里面写一些恶意脚本提交给服务器,之后服务器就会返回到页面,脚本就会被执行

image.png

常见XSS攻击方式

下面我们来介绍几种常见的XSS攻击方式

存储型 Stored XSS

  • 恶意脚本被存在数据库中
  • 访问页面 -> 读数据 === 被攻击
  • 危害最大,对全部用户可见

image.png

反射型 Reflected XSS

  • 不涉及数据库
  • 从URL上攻击

image.png

在URL参数上加入恶意脚本,服务端解析参数放入响应体中,导致恶意脚本注入成功

DOM型 Dom-based XSS

  • 不需要服务器的参与
  • 恶意攻击的发起 + 执行,都是在浏览器完成的

image.png

注意反射型与DOM型的区别

image.png

Mutation-based XSS

  • 利用了浏览器渲染DOM的特性(独特优化)
  • 不同浏览器,会有区别(按浏览器进行攻击)

嵌入上面这样一段文本内容,导致浏览器解析出来的HTML是下面这样的

image.png

img标签的src属性出错,导致执行onerror里的内容,这里可以注册恶意脚本,进行攻击

CSRF 跨站请求伪造

我们再来说说另一个攻击方式 Cross-site request forgery(CSRF) 跨站请求伪造

它又哪些特点呢?

  • 在用户不知情的前提下
  • 利用用户的权限(cookie)
  • 构造指定HTTP请求,窃取或修改用户敏感信息

看一个小demo示例 image.png

用户收到一封标题特别吸引人的邮件,他回点击进行查看,邮件是一个恶意的页面B,在访问这个B页面的时候,拿到了一些用户信息,然后他偷偷的将这些信息发送到 A服务上,这里用户是没有自己主动访问A的,此时A就拿到了用户的敏感信息,可以进行他想进行的操作了!

可以发一个GET请求

image.png 可以把链接放在a标签或者img标签中,a标签需要用户主动点击触发,而img标签进入页面自动就会触发

也可以是其他的请求类型

利用表单,提交一个POST请求 image.png

注入 Injection

SQL注入

我们来看看什么是SQL注入

SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

image.png

我们来看一些例子

① 服务端读取一些请求字段 ② 直接将这些字段以字符串的形式拼接 SQL 语句 image.png

如果这些字符串是恶意的,SQL语句随便删点东西,那就对我们的数据库进行了很大的损害了~

image.png

其他注入

不仅仅是SQL的注入,还可以是 ① cli ② OS command ③ SSRF

cli

调用虚拟视频格式转换脚手架,脚手架接收一些参数,这些参数允许用户自定义options image.png

攻击者可以传入这样的options,直接删库,让他们程序员赶紧跑路

image.png

OS command

你的服务端暴露了一些敏感的重要文件,导致被攻击者读取和修改

比如,通过nginx的配置,将访问流量转发到第三方网站,让他们的服务器不堪重负,直接下线

image.png

Server-Side Request Forgery(SSRF)

服务端伪造请求(严格⽽⾔,SSRF 不是 injection,但是原理类似)

这样可能回将内网的信息暴露给外部,导致外部可能会对内网的一些配置进行攻击 image.png

DoS

通过某种⽅式(构造特定请求),导致服务器资源被显著消耗, 来不及响应更多请求,导致请求挤压,进⽽雪崩效应。

回顾一下:正则表达式——贪婪模式

重复匹配时「?」 vs 「no ?」:满⾜“⼀个” 即可 vs 尽量多

image.png

ReDoS 基于正则表达式的Dos

贪婪:n 次不⾏?n - 1 次再试试?——回溯

暴力回溯,会导致系统的响应时间边长,接口的吞吐量下降

image.png

Distributed DoS DDoS 分布式DoS

短时间内,来⾃⼤量僵⼫设备的请求流量,服务器不能及时完成 全部请求,导致请求堆积,进⽽雪崩效应,⽆法响应新请求

「不搞复杂的,量⼤就完事⼉了」

攻击的特点

  1. 直接访问IP
  2. 任意API
  3. 消耗大量带宽(耗尽)

举一个例子,我们知道TCP连接需要三次握手,如果攻击者发很多次一个次的SYN不完成第三次的握手,导致大量连接未得到释放,当达到最大连接数的时候,新请求就无法进来了!!!

image.png

中间人攻击

最后,我们再介绍一种中间人攻击

当双方在进行通信的时候,可能以为对方是方,但是如果有一个中间人进行的拦截,中间加了一层,双方可能无法意识到中间人的存在,他可能会进行一些攻击

image.png

中间人攻击的前提是什么呢?

  1. 明文传输
  2. 信息篡改不可知
  3. 对方身份未验证

总结

今天我们最为攻击者,学习了五种攻击方式,其实通过文章中的一些描述,你应该可以想到很多方式可以避免掉这些攻击,那么YK菌会在下一篇博文中带大家以防御者的身份一起探索Web开发的安全之旅的防御篇!【青训营】Web 开发的安全之旅 —— 攻击篇 - XSS - CSRF - Injection - Dos - 中间人攻击生活中经常遇到诈骗的信息,Web开发中也会遇到很多安全的问题,这会危害到用户、公司、还有我们程序员自己(要被送去祭天)!!!我们一起跟着字节的刘老师,分别从黑客与开发者的角度来看看网络安全的攻击与防御今天先来探索探索Web安全之攻击篇XSS 跨站脚本攻击 Cross-Site ScriptingXSS就是 攻击者往页面中插入攻击脚本,对页面进行攻击攻击者使用XSS,主要是利用了开发者盲目信任用户提交的内容(比如带有恶意的字符串)开发者直接把字符串生成DOM这些恶意的代码可能是document.writeelement.innerHTML = anyStringSSR(user_data) // 伪码XSS的一些特点通常难以从UI上感知(暗地执行脚本)窃取用户的敏感信息(cookie/token)绘制UI(比如弹窗),诱骗用户点击/填写表单举一个例子服务端的两个接口:submit会接收请求,将请求中的参数存入数据库中render会从数据库中读取内容,写在HTML里,然后返回给用户这里没有对用户提交的内容做任何过滤,如果我们是攻击者,可以这样进行攻击:数据使用一个script标签包裹,然后在里面写一些恶意脚本提交给服务器,之后服务器就会返回到页面,脚本就会被执行常见XSS攻击方式下面我们来介绍几种常见的XSS攻击方式存储型 Stored XSS恶意脚本被存在数据库中访问页面 -> 读数据 === 被攻击危害最大,对全部用户可见反射型 Reflected XSS不涉及数据库从URL上攻击在URL参数上加入恶意脚本,服务端解析参数放入响应体中,导致恶意脚本注入成功DOM型 Dom-based XSS不需要服务器的参与恶意攻击的发起 + 执行,都是在浏览器完成的注意反射型与DOM型的区别Mutation-based XSS利用了浏览器渲染DOM的特性(独特优化)不同浏览器,会有区别(按浏览器进行攻击)嵌入上面这样一段文本内容,导致浏览器解析出来的HTML是下面这样的img标签的src属性出错,导致执行onerror里的内容,这里可以注册恶意脚本,进行攻击CSRF 跨站请求伪造我们再来说说另一个攻击方式 Cross-site request forgery(CSRF) 跨站请求伪造它又哪些特点呢?在用户不知情的前提下利用用户的权限(cookie)构造指定HTTP请求,窃取或修改用户敏感信息看一个小demo示例 用户收到一封标题特别吸引人的邮件,他回点击进行查看,邮件是一个恶意的页面B,在访问这个B页面的时候,拿到了一些用户信息,然后他偷偷的将这些信息发送到 A服务上,这里用户是没有自己主动访问A的,此时A就拿到了用户的敏感信息,可以进行他想进行的操作了!可以发一个GET请求 可以把链接放在a标签或者img标签中,a标签需要用户主动点击触发,而img标签进入页面自动就会触发也可以是其他的请求类型利用表单,提交一个POST请求 注入 InjectionSQL注入我们来看看什么是SQL注入SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。我们来看一些例子① 服务端读取一些请求字段 ② 直接将这些字段以字符串的形式拼接 SQL 语句 如果这些字符串是恶意的,SQL语句随便删点东西,那就对我们的数据库进行了很大的损害了~其他注入不仅仅是SQL的注入,还可以是 ① cli ② OS command ③ SSRFcli调用虚拟视频格式转换脚手架,脚手架接收一些参数,这些参数允许用户自定义options 攻击者可以传入这样的options,直接删库,让他们程序员赶紧跑路OS command你的服务端暴露了一些敏感的重要文件,导致被攻击者读取和修改比如,通过nginx的配置,将访问流量转发到第三方网站,让他们的服务器不堪重负,直接下线Server-Side Request Forgery(SSRF)服务端伪造请求(严格⽽⾔,SSRF 不是 injection,但是原理类似)这样可能回将内网的信息暴露给外部,导致外部可能会对内网的一些配置进行攻击 DoS通过某种⽅式(构造特定请求),导致服务器资源被显著消耗, 来不及响应更多请求,导致请求挤压,进⽽雪崩效应。回顾一下:正则表达式——贪婪模式重复匹配时「?」 vs 「no ?」:满⾜“⼀个” 即可 vs 尽量多ReDoS 基于正则表达式的Dos贪婪:n 次不⾏?n - 1 次再试试?——回溯暴力回溯,会导致系统的响应时间边长,接口的吞吐量下降Distributed DoS DDoS 分布式DoS短时间内,来⾃⼤量僵⼫设备的请求流量,服务器不能及时完成 全部请求,导致请求堆积,进⽽雪崩效应,⽆法响应新请求「不搞复杂的,量⼤就完事⼉了」攻击的特点直接访问IP任意API消耗大量带宽(耗尽)举一个例子,我们知道TCP连接需要三次握手,如果攻击者发很多次一个次的SYN不完成第三次的握手,导致大量连接未得到释放,当达到最大连接数的时候,新请求就无法进来了!!!中间人攻击最后,我们再介绍一种中间人攻击当双方在进行通信的时候,可能以为对方是方,但是如果有一个中间人进行的拦截,中间加了一层,双方可能无法意识到中间人的存在,他可能会进行一些攻击中间人攻击的前提是什么呢?明文传输信息篡改不可知对方身份未验证总结今天我们最为攻击者,学习了五种攻击方式,其实通过文章中的一些描述,你应该可以想到很多方式可以避免掉这些攻击。

转发自掘金社区!如有侵权请联系删除。
原文地址:# 【青训营】Web 开发的安全之旅 —— 攻击篇 - XSS - CSRF - Injection - Dos - 中间人攻击

> 生活中经常遇到诈骗的信息,Web开发中也会遇到很多安全的问题,这会危害到用户、公司、还有我们程序员自己(~要被送去祭天~)!!!我们一起跟着字节的刘老师,分别从黑客与开发者的角度来看看网络安全的攻击防御

今天先来探索探索Web安全之攻击篇

XSS 跨站脚本攻击 Cross-Site Scripting

image.png

XSS就是 攻击者往页面中插入攻击脚本,对页面进行攻击

攻击者使用XSS,主要是利用了

  1. 开发者盲目信任用户提交的内容(比如带有恶意的字符串)
  2. 开发者直接把字符串生成DOM

这些恶意的代码可能是

  • document.write
  • element.innerHTML = anyString
  • SSR(user_data) // 伪码

XSS的一些特点

  1. 通常难以从UI上感知(暗地执行脚本)
  2. 窃取用户的敏感信息(cookie/token)
  3. 绘制UI(比如弹窗),诱骗用户点击/填写表单

举一个例子

image.png

服务端的两个接口:

submit会接收请求,将请求中的参数存入数据库中

render会从数据库中读取内容,写在HTML里,然后返回给用户

这里没有对用户提交的内容做任何过滤,如果我们是攻击者,可以这样进行攻击:数据使用一个script标签包裹,然后在里面写一些恶意脚本提交给服务器,之后服务器就会返回到页面,脚本就会被执行

image.png

常见XSS攻击方式

下面我们来介绍几种常见的XSS攻击方式

存储型 Stored XSS

  • 恶意脚本被存在数据库中
  • 访问页面 -> 读数据 === 被攻击
  • 危害最大,对全部用户可见

image.png

反射型 Reflected XSS

  • 不涉及数据库
  • 从URL上攻击

image.png

在URL参数上加入恶意脚本,服务端解析参数放入响应体中,导致恶意脚本注入成功

DOM型 Dom-based XSS

  • 不需要服务器的参与
  • 恶意攻击的发起 + 执行,都是在浏览器完成的

image.png

注意反射型与DOM型的区别

image.png

Mutation-based XSS

  • 利用了浏览器渲染DOM的特性(独特优化)
  • 不同浏览器,会有区别(按浏览器进行攻击)

嵌入上面这样一段文本内容,导致浏览器解析出来的HTML是下面这样的

image.png

img标签的src属性出错,导致执行onerror里的内容,这里可以注册恶意脚本,进行攻击

CSRF 跨站请求伪造

我们再来说说另一个攻击方式 Cross-site request forgery(CSRF) 跨站请求伪造

它又哪些特点呢?

  • 在用户不知情的前提下
  • 利用用户的权限(cookie)
  • 构造指定HTTP请求,窃取或修改用户敏感信息

看一个小demo示例 image.png

用户收到一封标题特别吸引人的邮件,他回点击进行查看,邮件是一个恶意的页面B,在访问这个B页面的时候,拿到了一些用户信息,然后他偷偷的将这些信息发送到 A服务上,这里用户是没有自己主动访问A的,此时A就拿到了用户的敏感信息,可以进行他想进行的操作了!

可以发一个GET请求

image.png 可以把链接放在a标签或者img标签中,a标签需要用户主动点击触发,而img标签进入页面自动就会触发

也可以是其他的请求类型

利用表单,提交一个POST请求 image.png

注入 Injection

SQL注入

我们来看看什么是SQL注入

SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。

image.png

我们来看一些例子

① 服务端读取一些请求字段 ② 直接将这些字段以字符串的形式拼接 SQL 语句 image.png

如果这些字符串是恶意的,SQL语句随便删点东西,那就对我们的数据库进行了很大的损害了~

image.png

其他注入

不仅仅是SQL的注入,还可以是 ① cli ② OS command ③ SSRF

cli

调用虚拟视频格式转换脚手架,脚手架接收一些参数,这些参数允许用户自定义options image.png

攻击者可以传入这样的options,直接删库,让他们程序员赶紧跑路

image.png

OS command

你的服务端暴露了一些敏感的重要文件,导致被攻击者读取和修改

比如,通过nginx的配置,将访问流量转发到第三方网站,让他们的服务器不堪重负,直接下线

image.png

Server-Side Request Forgery(SSRF)

服务端伪造请求(严格⽽⾔,SSRF 不是 injection,但是原理类似)

这样可能回将内网的信息暴露给外部,导致外部可能会对内网的一些配置进行攻击 image.png

DoS

通过某种⽅式(构造特定请求),导致服务器资源被显著消耗, 来不及响应更多请求,导致请求挤压,进⽽雪崩效应。

回顾一下:正则表达式——贪婪模式

重复匹配时「?」 vs 「no ?」:满⾜“⼀个” 即可 vs 尽量多

image.png

ReDoS 基于正则表达式的Dos

贪婪:n 次不⾏?n - 1 次再试试?——回溯

暴力回溯,会导致系统的响应时间边长,接口的吞吐量下降

image.png

Distributed DoS DDoS 分布式DoS

短时间内,来⾃⼤量僵⼫设备的请求流量,服务器不能及时完成 全部请求,导致请求堆积,进⽽雪崩效应,⽆法响应新请求

「不搞复杂的,量⼤就完事⼉了」

攻击的特点

  1. 直接访问IP
  2. 任意API
  3. 消耗大量带宽(耗尽)

举一个例子,我们知道TCP连接需要三次握手,如果攻击者发很多次一个次的SYN不完成第三次的握手,导致大量连接未得到释放,当达到最大连接数的时候,新请求就无法进来了!!!

image.png

中间人攻击

最后,我们再介绍一种中间人攻击

当双方在进行通信的时候,可能以为对方是方,但是如果有一个中间人进行的拦截,中间加了一层,双方可能无法意识到中间人的存在,他可能会进行一些攻击

image.png

中间人攻击的前提是什么呢?

  1. 明文传输
  2. 信息篡改不可知
  3. 对方身份未验证

总结

今天我们最为攻击者,学习了五种攻击方式,其实通过文章中的一些描述,你应该可以想到很多方式可以避免掉这些攻击,那么YK菌会在下一篇博文中带大家以防御者的身份一起探索Web开发的安全之旅的防御篇!

转发自掘金社区!如有侵权,请联系删除。
原文地址https://juejin.cn/post/7009536350290444324?share_token=5af9029d-d898-4f7b-b543-b50f3b50b5a9

最后修改:2021 年 09 月 19 日 05 : 32 PM
如果觉得我的文章对你有用,请随意赞赏