028-86261949

当前位置:首页 > 技术交流 > WEB前端常见安全攻击及防御技巧系列(一)

WEB前端常见安全攻击及防御技巧系列(一)

2019/10/23 15:19 分类: 技术交流 浏览:0

今天主要给大家分享一下web安全这方面的知识点,对于一个web从业者来讲,不得不说这是一个非常有份量的课题,近几年网络上频繁出现,相关安全的危害问题,所有以今天主要是总结一下web相关的安全攻防知识点,希望对看到本篇文章的你有所帮助.

 

  本文主要内容是分析几种常见攻击类型及防御的手法,如果你对相关安全问题有所了解,那么主要还是让编码设计的过程中时时刻刻相到这一点,在实现相关存在安全问题的代码块时,进行反复测试每一个细节,防范于未然.

先来了解一下常见的web安全攻防操作吧!

 

一、XXS

首先说一下最常见的XSS: XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容

 

XSS 的原理是恶意攻击者往 Web 页面里插入恶意可执行网页脚本代码,当用户浏览该页之时,嵌入其中 Web 里面的脚本代码会被执行,从而可以达到攻击者盗取用户信息或其他侵犯用户安全隐私的目的。XSS 的攻击方式千变万化,但还是可以大致细分为几种类型。

 

非持久型 XSS

非持久型 XSS 漏洞,也叫反射型 XSS 漏洞,一般是通过给别人发送带有恶意脚本代码参数的 URL,当 URL 地址被打开时,特有的恶意代码参数被 HTML 解析、执行。

例如:你的 Web 页面中包含有以下代码:

<select>

<script>

document.write(''

+ '<option value=1>'

+ location.href.substring(location.href.indexOf('default=') + 10)

+ '</option>'

);

document.write('<option value=2>源码时代</option>');

</script>

</select>

攻击者可以直接通过类似以下的 URL http://www.xxx.com/xx.php?default=<script>alert(document.cookie)</script> 注入可执行的脚本代码

 

漏洞攻击的几点特征:

  1. 即时性,可以不经过服务器存储,直接通过 HTTP 的 GET 和 POST 请求就能完成一次攻击,获取到用户隐私数据
  2. 触发时需要诱骗点击链接
  3. 反馈率低,所以较难发现和响应修复
  4. 盗取用户敏感保密信息

 

防止漏洞攻击必做以下几个操作:

1 . 所有web中的数据都通过服务器端操作。

2 . 尽量避免通过 url,document.referrer,document.forms 等获取数据直接进行渲染操作。

3 . 避免使用 eval, new Function(),document.write(),document.writeln(),window.setInterval(),window.setTimeout(),

innerHTML,document.creteElement() 等可以执行字符串的操作方法。

4 . 如果避免不了,可以对获取到的重要字符串数据进行escape 转义编码操作。目的是为了把特殊符号换成转义字符,让相应的代码执行不了

持久型 XSS

持久型 XSS 漏洞,也被称为存储型 XSS 漏洞,一般存在于 Form 表单提交等交互功能,如发帖留言,提交文本信息等,攻击者利用的 XSS 漏洞,将恶意代码经正常功能提交进入数据库持久保存起来,当前端页面获得后端从数据库中读出的注入代码时,正好将有恶意的代码渲染执行了。

 

其操作方式和非持久型 XSS 漏洞类似,只不过持久型是来源于后端从数据库中读出来的数据。

 

此攻击需要同时满足以下几个条件:

1.POST提交表单后端没做转义直接存入数据库。

2.后端取出数据直接输出给前端。

3.前端获取后端的数据没做转义直接渲染成DOM。

 

持久型 XSS 有以下几个特点 :

1.持久性比较强

2.危害面广

3.盗取用户敏感私密信息

 

防止办法:

为了防止持久性漏洞,需要前后端共同努力,后端在入库数据时,尽量把所有的数据进行转义处理,输出给前端的数据也需要进行转义处理,当然前端也需要在输出时需要把渲染数据转义

 

 

字符集的 XSS

由于浏览器对网页中设置的字符集解析不一致,可以使用写相关解析规则,或绕过相关规则来实现注入的操作,这叫基于字符集的XSS

 

如:

UTF-7 是可以将所有的 unicode 通过 7bit 来表示的一种字符集。早期多数被利用在邮件环境当中,但现在已经从 Unicode 规格中移除。这个字符集为了通过 7bit 来表示所有的文字, 除去数字和一部分的符号,其它的部分将都以 base64 编码为基础的方式呈现

HTML代码

<div> 我了个去哦</div>

用UTF-7表示为:

+ADw-div+AD4- +YhFOhk4qU7v/AQ- +Adw-/div+AD4

 

 

同样的,来看一下js吧

<script> alert("xss") </script>

用UTF-7表示为:

+ADw-script+AD4- alert(+ACI-xss+ACI-) +ADw-/script+AD4-

 

 

防止方法:

1.记住指定 <meta charset="utf-8">

2.XML 中不仅要指定字符集为 utf-8,而且标签要闭合

 

 

网址跳转 XSS

 在有一些特定的场景中,后端会使用url的302定向操作,把当前的网页使用302定向到其它页面url上进行跳转,如果当前被定向的页面url正好带有用户隐私信息,可能会被恶意者利用,进行恶意跳转网页

 

防止方法:

1.对待跳转的 url加入白名单或者设置指定规则来进行过滤

2后端注意对敏感信息的保护, 比如 cookie 使用来源验证。

 

总结:

以上为本期web安全分享内容,主要是讲解XSS常用攻防技巧,如有相关兴趣有困扰的小伙伴们可以进行技术交流,下期分享<web前端安全攻击及防御技巧系列(二) >,请关注我,关注更多web安全相关内容!

#标签:WEB前端安全攻击,WEB前端防御技巧