一、XSS漏洞简介

跨站脚本攻击

  攻击者在Web页面或URL里插入恶意的JavaScript脚本,而服务器与客户端信任用户的输入,没有对内容进行限制和过滤。当用户浏览网站时,嵌入的恶意代码会被浏览器解析执行。

  漏洞危害:
    1. 窃取帐号,入侵者可以冒充用户身份登录后台。使得攻击者具有恶意操纵数据的能力,包括读取、更改、添加、删除;

    2. 网站挂马。先将恶意攻击代码嵌入到Web应用程序之中。当用户浏览该页面时,用户的计算机会被植入木马

    3. 广告植入和钓鱼。攻击者可植入广告,或发送钓鱼信息,严重影响到用户的正常使用和体验;

二、XSS漏洞分类

  1. 反射型
  <非持久化>

    前端发出请求时,XSS代码作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器被解析执行;

    常见位置:URL(如:日期查询参数)、搜索框、查询框

  2. 存储型
  <持久化>

    提交的代码会存储在服务器端的数据库、内存、文件系统;

    常见位置:论坛评论、个人信息修改、富文本编辑器

  3. DOM型
    基于文档对象模型(Document Object Model)的一种漏洞。它的攻击代码并不需要服务器解析响应,其依赖浏览器端的DOM解析。客户端上的JavaScript脚本可以访问浏览器的DOM并修改页面的内容,不依赖服务器的数据,直接从浏览器端获取数据并执行;

    在客户端直接输出DOM内容的时候极易触发DOM型XSS漏洞

------如何判断是哪一种XSS

  方法:发送一次带XSS代码的请求,若只能在当前返回的数据包里面发现XSS代码,则是反射型;

                                                           若以后这个页面的返回包里面会有XSS代码,则是存储型;

                 若在返回包里找不到XSS代码,则是DOM型。

 

三、XSS漏洞原理

攻击者利用Web服务器中的应用程序或者代码漏洞,在页面中嵌入客户端脚本(通常是一段JavaScript编写的恶意代码,少数情况下还有ActionScript、VBScript等语言),当信任此Web服务器的用户访问Web站点中含有恶意脚本代码的页面或打开收到的URL链接时,用户浏览器会自动加载并执行该恶意代码,从而达到攻击的目的。

当应用程序没有对用户提交的内容进行验证和重新编码,而是直接呈现给网站的访问者时,就可能会触发XSS攻击。

 

四、XSS漏洞的检测与防范

1、检测

手工检测

手工检测重点是要考虑数据输入的地方,且需要清楚输入的数据输出到什么地方。

在检测的开始,可以输入一些敏感字符,如“< 、>、()”等,提交后查看网页源代码的变化以发现输入被输出到什么地方,且可以发现相关敏感字符是否被过滤。

手工检测结果相对准确,但效率较低。

工具检测

常用工具 AVWS(Acunetix Web vulnerablility scanner) 、burpsuite等。还有一些专门针对XSS漏洞的检测工具,如:XSSer、XSSF(跨站脚本攻击框架)、beff等。

2、防御

①使用黑名单进行

②对HTML标签或特殊字符进行过滤

③使用内容安全的CSP