常见的网络攻击原理

本文详细介绍了常见的网络攻击类型,包括XSS(跨站脚本攻击)、CSRF(跨站请求伪造)、SSRF(服务器端请求伪造)和CRLF注入。XSS分为反射型、存储型和DOM-based型,攻击者通过注入恶意脚本来执行攻击。CSRF攻击者利用用户的cookie盗用用户身份。SSRF则是利用服务器发起恶意请求。CRLF注入则涉及HTTP响应拆分。文章还深入探讨了各类攻击的防御策略,如设置cookie安全策略、开启CSP等。
摘要由CSDN通过智能技术生成

常见的网络攻击原理

1.XSS


1.1什么是XSS攻击?
  • XSS攻击:跨站脚本攻击。(重点在于脚本的执行)
  • 原理:恶意攻击者在web页面中会插入一些恶意的script代码。当用户浏览该页面的时候,那么嵌入到web页面中script代码会执行,因此会达到恶意攻击用户的目的。
  • XSS攻击分类:反射型、存储型、及 DOM-based型。 反射性和DOM-baseed型可以归类为非持久性XSS攻击。存储型可以归类为持久性XSS攻击。
1.2.XSS攻击分类
1.2.1.反射型XSS
  • 原理:反射性xss一般指攻击者通过特定的方式来诱惑受害者去访问一个包含恶意代码的URL。当受害者点击恶意链接url的时候,恶意代码会直接在受害者的主机上的浏览器执行。
  • 特点:非持久性XSS,攻击方式只有一次性。
  • 反射性攻击步骤:
    1. 攻击者在url后面的参数中加入恶意攻击代码。
    2. 用户打开带有恶意代码的URL的时候,网站服务端将恶意代码从URL中取出,拼接在html中并且返回给浏览器端。
    3. 用户浏览器接收到响应后执行解析,其中的恶意代码也会被执行到。
    4. 攻击者通过恶意代码来窃取到用户数据并发送到攻击者的网站。攻击者会获取到比如cookie等信息,然后使用该信息来冒充合法用户
      的行为,调用目标网站接口执行攻击等操作。
  • 常见的反射性XSS有哪些?
    1. 常见的是:恶意链接。

1.2.2.存储型XSS

  • 原理:将恶意代码上传或存储到服务器中,下次只要受害者浏览包含此恶意代码的页面就会执行恶意代码。
  • 存储型XSS的攻击步骤如下:
    1. 攻击者将恶意代码提交到目标网站数据库中。
    2. 用户打开目标网站时,网站服务器将恶意代码从数据库中取出,然后拼接到html中返回给浏览器中。
    3. 用户浏览器接收到响应后解析执行,那么其中的恶意代码也会被执行。
    4. 那么恶意代码执行后,就能获取到用户数据,比如上面的cookie等信息,那么把该cookie发送到攻击者网站中,那么攻击者拿到该
      cookie然后会冒充该用户的行为,调用目标网站接口等违法操作。
  • 防范操作:
    1. 后端需要对提交的数据进行过滤。
    2. 前端也可以做一下处理方式,比如对script标签,将特殊字符替换成HTML编码这些等。

1.2.3.DOM-based型XSS

  • **原理:**用户在客户端输入的数据包含了恶意的js脚本的话,但是这些脚本又没有做任何过滤处理的话,那么我们的应用程序就有可能受到DOM-based XSS的攻击。
  • 攻击步骤:
    1. 攻击者构造出特殊的URL、在其中可能包含恶意代码。
    2. 用户打开带有恶意代码的URL。
    3. 用户浏览器收到响应后解析执行。前端使用js取出url中的恶意代码并执行。
    4. 执行时,恶意代码窃取用户数据并发送到攻击者的网站中,那么攻击者网站拿到这些数据去冒充用户的行为操作。调用目标网站接口
      执行攻击者一些操作。
  • 导致被攻击的操作有:
    1. 使用document.write直接输出导致浏览器解析恶意代码
    2. 使用innerHTML直接输出导致浏览器解析恶意代码
    3. 使用location/location.href/location.replace/iframe.src 造成的XSS

1.2.4.SQL注入

  • 原理:SQL注入是通过客户端的输入把SQL命令注入到一个应用的数据库中,从而执行恶意的SQL语句。
  • 被攻击原因:sql语句伪造参数,然后对参数进行拼接后形成xss攻击的sql语句。最后会导致数据库被攻击了。
  • 防范的方法:
    1. 我们可以使用预编译语句(PreparedStatement,这样的话即使我们使用sql语句伪造成参数,到了服务端的时候,这个伪造sql语句的参数也只是简单的字符,并不能起到攻击的作用。
    2. 数据库中密码不应明文存储的,可以对密码使用md5进行加密,为了加大破解成本,所以可以采用加盐的方式。
1.3.XSS如何防范

1.3.1.cookie 安全策略

在服务端设置cookie的时候设置http-only,, 这样就可以防止用户通过JS获取cookie。

  • http-only: 只允许http或https请求读取cookie、JS代码是无法读取cookie的(document.cookie会显示http-only的cookie项被自动过滤掉)。发送请求时自动发送cookie.
  • secure-only: 只允许https请求读取,发送请求时自动发送cookie。
  • host-only: 只允许主机域名与domain设置完成一致的网站才能访问该cookie。

1.3.2.X-XSS-Protection设置

目前该属性被所有的主流浏览器默认开启XSS保护。

该参数是设置在响应头中目的是用来防范XSS攻击的。它有如下几种配置:

  • 禁用XSS保护
  • 启用XSS保护
  • mode=block; 启用xss保护,并且在检查到XSS攻击是,停止渲染页面。

1.3.3.XSS防御HTML编码

我们为什么要防御HTML编码呢?比如如下html代码:

content
,在div标签中存在一个输出变量content,在div标签中存在一个输出变量{content}. 那么浏览器在解析的过程中,首先是html解析,当解析到div标签时,再解析 content的内容,然后会将页面显示出来。那假如该content的内容,然后会将页面显示出来。那假如该{content} 的值是 这样的呢?因此该script脚本就会解析并且执行了,从而达到XSS的攻击目标。
因此我们需要将不可信数据放入到html标签内(比如div、span等)的时候需要进行html编码。
编码规则:将 & < > " ’ / 转义为实体字符。

// 使用正则表达式实现html编码
    function htmlEncodeByRegExp(str) {
   
      var s = '';
      if (str.length === 0) {
   
        return s;
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值