最新消息: PyCharm vs VSCode,哪个更好?
您现在的位置是:群英 > 网络安全 > 安全技术 >
XSS攻击的分类以及要怎么躲避?
网络发表于 2020-08-31 18:42 次浏览
         XSS攻击的分类有几种以及要怎么躲避?最近有些朋友对这个问题提出了比较多的疑问,我们来解析一下XXS攻击是什么?有几种? XSS攻击要怎么躲避?
一.概述:

         xss(Cross Site Scripting),即跨站脚本攻击,也就是代码注入攻击, 是一种常见于web应用程序中的计算机安全漏洞。

        攻击者往 web 页面里插入恶意的 HTML 代码(Javascript、css、html 标签等),当用户浏览该页面时,嵌入其中的 HTML 代码会被执行,从而达到恶意攻击用户的目的, 导致用户安全信息泄露(获取用户的敏感信息),危害数据安全

        例如盗取各类用户帐号、网站挂马、盗窃企业重要信息等。

        它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻击中,通过插入恶意脚本,实现对用户游览器的控制,获取用户的一些信息。

 

二.实施XSS攻击需要具备的条件

        1.需要向web页面注入恶意代码;

        2.这些恶意代码能够被浏览器成功的执行。

三.xss攻击主要分两类

        XSS主要分为两大类:非持久型攻击、持久型攻击。

        非持久型攻击(反射型XSS, DOM-based 型):经过后端,不经过数据库;
        持久型攻击(存储型XSS):经过后端,经过数据库。
        常见的 XSS 攻击有三种:反射型、DOM-based 型、存储型。



1.持久型攻击

        存储型XSS

        持久型也可认为是存储型XSS:当恶意的Java代码写入web页面,会被存储到应用服务器端,简而言之就是会被存储到数据库。等用户再次打开web页面时,页面会继续执行恶意代码,达到持续攻击用户的作用。

        攻击者事先将恶意代码上传或储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码。这就意味着只要访问了这个页面的访客,都有可能会执行这段恶意脚本,因此储存型XSS的危害会更大。

        存储型 XSS 一般出现在网站留言、评论、博客日志等交互处,恶意脚本存储到客户端或者服务端的数据库中。


2.非持久型攻击

        (1)反射性XSS

        非持久型XSS又叫反射型XSS,属于一次性攻击,仅对当次的页面访问产生影响。非持久型XSS攻击,

        反射型 XSS 一般是攻击者通过特定手法(如电子邮件),诱使用户去访问一个包含恶意代码的 URL,当受害者点击这些专门设计的链接的时候,恶意代码会直接在受害者主机上的浏览器执行,从而达到攻击目的.

        对于访问者而言是一次性的,具体表现在我们把我们的恶意脚本通过 URL 的方式传递给了服务器,而服务器则只是不加处理的把脚本“反射”回访问者的浏览器而使访问者的浏览器执行相应的脚本。反射型 XSS 的触发有后端的参与,要避免反射性 XSS,必须需要后端的协调,后端解析前端的数据时首先做相关的字串检测和转义处理。

        此类 XSS 通常出现在网站的搜索栏、用户登录口等地方,常用来窃取客户端 Cookies 或进行钓鱼欺骗。


(2)DOM-based 型

        DOM是一个平台和语言都中立的接口,可以执行程序和脚本,能够动态访问和更新文档的内容、结构以及样式。DOM型XSS是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞。Dom - xss是通过url传入参数去控制触发的。

        客户端的脚本程序可以动态地检查和修改页面内容,而不依赖于服务器端的数据。例如客户端如从 URL 中提取数据并在本地执行,如果用户在客户端输入的数据包含了恶意的 JavaScript 脚本,而这些脚本没有经过适当的过滤和消毒,那么应用程序就可能受到 DOM-based XSS 攻击。需要特别注意以下的用户输入源 document.URL、 location.hash、 location.search、 document.referrer 等。


四.如何避免

        Xss漏洞在web站点运用中是最为常见的漏洞之一,XSS会以各种方式执行恶意的Java代码来破坏用户使用的站点。我们能够修补XSS漏洞,但是我们也不能100%的肯定没有人可以打破我们的过滤机制。恶意的攻击者总能够找到办法,绕过我们的过滤机制,从而进行恶意代码的执行。

        1. 在web页面上,将用户输入的数据都进行转译,也就是将常用的恶意代码中的[<,>,”,,&]等符号都用[<,>,",&]字符进行转译。当这些html标签符号被转译后,浏览器就会拿它当作一个普通字符串对待,而不是当作一个标签的开始/结束标志对待。从而不会执行Java的恶意代码。

        2. DOM型XSS的防御方法:DOM型XSS主要是由客户端的脚本通过DOM动态数据输入到页面,而不是依赖于将数据提交给服务器端,从客户端获得DOM中的数据在本地执行。因而,仅从服务器端是无法防御的。其防御在于:(1) 避免客户端文档重写、重定向或其他敏感操作;同时,避免使用客户端数据,这些操作尽量在服务器端使用动态页面来实现;(2) 分析和强化客户端JS代码;特别是受到用户影响的DOM对象,注意能直接修改DOM和创建HTML文件的相关函数或方法,并在输出变量到页面时先进行编码转义,如输出到HTML则进行HTML编码、输出到<>则进行JS编码。

        获取用户的输入,不用innerHtml,用innerText.
        对用户的输入进行过滤,如对& < > " ' /等进行转义;
 

        总的来说:

        不管是用户端从任何的输入到任何输出都进行过滤,转义,让攻击者的代码注入不能识别,就可以避免攻击了
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
相关信息推荐