0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是跨站脚本攻击?一篇带你了解什么叫做XSS

马哥Linux运维 来源:稀土掘金 2023-12-20 09:49 次阅读

XSS简介

(1)XSS简介

XSS作为OWASP TOP 10之一。

XSS中文叫做跨站脚本攻击(Cross-site scripting),本名应该缩写为CSS,但是由于CSS(Cascading Style Sheets,层叠样式脚本)重名,所以更名为XSS。XSS(跨站脚本攻击)主要基于javascript(js)来完成恶意的攻击行为。

XSS是一种经常出现在web应用中的计算机大全漏洞,也是web中最主流的攻击方式。那么什么是XSS呢?

XSS是指恶意攻击者利用网站对用户提交的数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到web页面中去。使别的用户访问都会执行相应的嵌入代码。

从而盗取用户资料、利用用户身份进行某种动作或者访问者进行病毒侵害的一种攻击方式。

(2)XSS原理

利用我们所知道的各种黑魔法,向web页面插入js代码,让js代码可以被浏览器执行,访问该页面 的用户则被攻击。

(3)XSS的危害

针对用户 窃取cookie劫持的会话 网络钓鱼 放马挖矿 广告刷流量 针对web服务 劫持后台(常见) 篡改页面 传播蠕虫 内网扫描(常见)

(4)XSS类型

反射型:

反射型也称为非持久型,这种类型的脚本是最常见的,也是使用最为广泛的一种,主要用于将恶意的脚本附加到URL地址的参数中。

存储型:

攻击者将已经构造完成的恶意页面发送给用户,用户访问看似正常的页面后收到攻击,这类XSS通常无法直接在URL中看到恶意代码,具有较强的持久性和隐蔽性。

DOM

DOM型XSS无需和后端交互,而是基于JavaScript上,JS解析URL中恶意参数导致执行JS代码

2.XSS分类详解

(1)存储型XSS

存储型XSS:持久性,代码是存储在web服务器中的,比如在个人信息或发表文章等地方插入代码,如果没有过滤或者过滤不严,那么这些代码将存储在服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫、盗窃cookie。每一个访问特定页面的用户,都会受到攻击。

特点:

XSS攻击代码存储于web server上;攻击者一般是通过网站的留言、评论、博客、日志等功能(所有能够向web server输入内容的地方),将攻击代码存储到web server上的 存储型XSS攻击流程:

58d5c52a-9e67-11ee-8b88-92fbcf53809c.jpg

(2)反射型XSS

反射型跨站脚本也称作非持久型、参数型跨站脚本、这类型的脚本是最常见的 ,也是使用最为广泛的一种,主要用于将恶意的脚本附加到URL地址的参数中


  http://www.test.com/search.php?key=">


一般使用的将构造好的URL发给受害者,是受害者点击触发,而且只执行一次,非持久化。

反射型XSS攻击流程:

58f4b3a4-9e67-11ee-8b88-92fbcf53809c.jpg

反射型XSS-DVWA:


  Payload:
  Low:
  Mid:
  High:


(3)JS简介

JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。

在1995年时,由Netscape公司的Brendan Eich,在网景导航者浏览器上首次设计实现而成。因为Netscape与Sun合作,Netscape管理层希望它外观看起来像Java,因此取名为JavaScript。但实际上它的语法风格与Self及Scheme较为接近。为了取得技术优势,微软推出了JScript,CEnvi推出ScriptEase,与JavaScript同样可在浏览器上运行。为了统一规格,因为JavaScript兼容于ECMA标准,因此也称为ECMAScript。

3.XSS发现与防护

(1)XSS的五种防御方式

HTML节点内容的XSS防御

转义掉<<和>>即转义掉<>即可,转义的时候有两种,一种是写入数据库的时候进行转义,另一种是在解析的时候转义 这里是在显示的时候转义


var escapeHtml = function(str){
    str = str.replace(/>/g,'<')
    str = str.replace(/>/g,'>')
    return str
}
escapeHtml(content)

HTML属性的XSS防御 转义" &quto;即转义掉双引号,'转义掉单引号,(另一个要注意的是实际上html的属性可以不包括引号,因此严格的说我们还需要对空格进行转义,但是这样会导致渲染的时候空格数不对,因此我们不转义空格,然后再写html属性的时候全部带上引号)这样属性就不会被提前关闭了


var escapeHtmlProperty = function(str){
    str = str.replace(/"/g,'&quto;');
    str = str.replace(/'/g,''');
    str = str.replace(/ /g,' ');
    return str;
}


escapeHtmlProperty(content);

其实以上两个函数可以合并成一个函数,这样不管是内容还是属性都可以使用一个函数来过滤了。

HTML转义函数


var escapeHtmlProperty = function(str){
    if(!str) return '';
    str = str.replace(/&/g,'&');
    str = str.replace(/>/g,'<');
    str = str.replace(/>/g,'>');
    str = str.replace(/"/g,'&quto;');
    str = str.replace(/'/g,''');
    return str;
}
escapeHtml(content);

js转义

转义掉""或者替换成json


var escapeForJs = function(str){
    if(!str) return '';
    str = str.replace(/\/g,'\\');
    str = str.replace(/"/g,'"');
}


富文本

由于需要完整的HTML因此不太容易过滤,一般是按照白名单进行保留部分标签和属性来进行过滤,除了允许的标签和属性,其他的全部不允许(也有黑名单的方式,但是由于html复杂效果比较差,原理就是之前的正则替换) 其实可以用别人写好的XSS组件就叫做xss,直接

npm install xss

白名单-使用第三方库XSS,支持指定白名单


var xssFilter = function(html){
    if(!html) return '';
    var xss = require('xss');
    var ret = xss(html,{
        whileList:{
            img:['src'],
            a:['href'],
            font:['size','color']
        },
        onIgnoreTag: function(){
            return '';
        }
    });
    
    console.log(html,ret);
    
    return ret;
}

(2)XSS蠕虫攻击

XSS蠕虫的破坏力和影响力都是巨大的。XSS蠕虫主要发生在用户之间存在交互行为的页面中,当Web应用程序对用户输入的数据信息没有做严格的过滤时,通过结合Ajax的异步提交,就可以实现在植入恶意代码的同时,将恶意代码进行对外发送,即实现了代码的感染和传播,也就形成了XSS蠕虫。

(3)挖掘XSS漏洞

扫描工具自动化检测 AWVS AppScan JSKy 手工测试 源码分析

(4)XSS漏洞的防范

XSS跨站脚本攻击漏洞防范

客户端用户

IE8及高级版本,开启XSS筛选器功能 Firefox使用CSP、Noscript等扩展功能 瑞星个人防火墙2012版本开启XSS拦截功能

Web应用程序员

使用HttpOnly 完善的输入、输出检查

HttpOnly

HttpOnly最初是由微软提出的,目前已经被多款流行浏览器厂商所采用。HttpOnly的作用不是过滤XSS跨站脚本攻击,而是浏览器将禁止页面的Javascript访问带有HttpOnly属性的Cookie,解决XSS跨站脚本攻击后的Cookie会话劫持行为。

输入、输出检查

由于三种XSS跨站脚本攻击类型的漏洞成因可不相同,针对输入输出的检查一部分适用于反射型XSS与存储型XSS,而另外一些检查适用于基于DOM的XSS 在大多数的时候都是对可信字符的检查或输入数据格式的检查,如用户输入的注册账号信息中只允许包括字母、数字、下划线和汉字等,对于输入的一切非白名单内的字符均认为是非法输入。

数据格式如IP地址、电话号码、邮件地址、日期等数据都具有一定的格式规范,只有符合数据规范的输入信息才允许通过检查。输出检查主要是针对数据展示过程,应该对数据的信息进行HTML编码处理,将可能存在导致XSS跨站脚本攻击的恶意字符进行编码,在不影响正常数据显示的前提条件下,过滤恶意字符。常见的可能造成的XSS跨站脚本攻击的字符及其HTML编码如:


  "  ---  "
  '  ---  &apos
  &  ---  &
  <  ---  &It
  >  ---  >


除了常用的编码外,任何字符都可以使用其ASCII码进行HTML编码,如:


  %  ---  &
  *  ---  &

DOM Based XSS输入、输出检查


- 特殊性
  - 基于DOM的XSS跨站脚本攻击发生时,恶意数据的格式与传统的XSS跨站脚本攻击数据格式有一定的差异,甚至可以在不经过服务器端的处理和响应的情况下,直接对客户端实施攻击行为。
- 输入检查
  - 在客户端部署相应的安全检测代码的过滤效果要比在服务器端检测的效果更加明显。
  - 客户端检测代码来保证用户输入的数据只包含字母、数字和空格。
  - 服务端实现上述数据检查的功能
    - URL参数名称、个数检测
    - 参数值类型及内容检测
- 输出检查
  - 在将用户可控的DOM数据内容插入到文档之前,Web应用程序应对提交的数据中可能存在的各种危险字符和表达式进行过滤以安全的方式插入到文档中进行展现。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • HTML
    +关注

    关注

    0

    文章

    273

    浏览量

    29297
  • javascript
    +关注

    关注

    0

    文章

    511

    浏览量

    53406
  • DOM
    DOM
    +关注

    关注

    0

    文章

    16

    浏览量

    9520
  • XSS
    XSS
    +关注

    关注

    0

    文章

    23

    浏览量

    2318

原文标题:你知道跨站脚本攻击吗?一篇带你了解什么叫做XSS

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    预防跨站脚本攻击XSS)的方法

    跨站脚本攻击XSS),是最普遍的Web应用安全漏洞。这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户会访问到的页面中,当正常用户访问该页面
    的头像 发表于 09-30 10:05 698次阅读

    《CDN 之我见》系列二:原理(缓存、安全)

    准确溯源攻击手段暴力,流量大,以达到短时间不能服务为主要目的技术门槛低,但由于需要众多资源,攻击成本较高而例如 XSS 、SQL 注入、
    发表于 06-12 16:59

    文章带你了解原型制作化技术

    文章带你了解什么是原型制作化技术?
    发表于 04-26 06:15

    带你了解步进电机的相关知识

    带你了解步进电机的相关知识:相、线、极性和步进方式2017-09-07 16:45这里不说步进电机的 “细分” 实验,只说下有关步进电机的基础概念以及步进电机的三种工作方式——单
    发表于 07-08 06:48

    基于动态污点分析的DOM XSS漏洞检测算法

    针对Web客户端中基于文档对象模型的跨站脚本攻击(DOM XSS)漏洞检测问题,提出一种基于动态污点分析的DOM XSS漏洞检测算法。通过构造DOM模型和修改Firefox Spide
    发表于 12-18 16:01 0次下载
    基于动态污点分析的DOM <b class='flag-5'>XSS</b>漏洞检测算法

    基于Django的XSS防御研究与实现

    跨站脚本攻击XSS)是当前最流行的Web应用攻击方式之一,而Django作为目前比较火热的Web应用开发框架,并没有为其开发的Web应用提供有效的
    发表于 04-09 11:33 0次下载
    基于Django的<b class='flag-5'>XSS</b>防御研究与实现

    什么是XSS跨站漏洞以及它的修复方案

    XSS攻击又分好几个种类,分存储型XSS,反射型XSS,DOM型XSS,为了快速的让大家理解这些专业术语,我这面通俗易懂的跟大家介绍一下,存
    发表于 09-09 11:34 1359次阅读

    一文了解安全测试基础之XSS

    在web项目安全漏洞中,XSS是最为流程的漏洞类型之一,今天就来介绍一下XSS
    的头像 发表于 06-28 11:15 2174次阅读

    使用双向长短时记忆网络检测跨站脚本攻击

    目前传统的跨站脚本XSS)检测技术大多使用机器学习方法,存在代码被恶意混淆导致可读性不高特征提取不充分并且效率低等缺陷,从而导致检测性能不佳。针对上述问题,提出了使用双向长短时记忆网络检测跨站脚本
    发表于 04-09 16:09 10次下载
    使用双向长短时记忆网络检测跨站<b class='flag-5'>脚本</b><b class='flag-5'>攻击</b>

    XSS发生原理及XSS攻击的类型

    xss发生原理 xss就是跨站脚本攻击,造成这种漏洞存在的根本原因是开发者的安全意识不够而留下的漏洞,使得用户可以直接在页面提交代码,并且执行,从而获取到用户权限,cookie等危害,
    的头像 发表于 08-04 18:00 3563次阅读

    CSRF是什么 CSRF与XSS攻击的区别

    ,虚拟货币转账。。。。。。造成的问题包括:个人隐私泄露以及财产安全。 CSRF与XSS攻击的区别 (1)CSRF攻击的主要目的是让用户在不知情的情
    的头像 发表于 08-05 10:09 6371次阅读

    物联网是什么,一文带你了解物联网

    一篇文章带你了解物联网
    的头像 发表于 03-23 14:16 3374次阅读

    XSS漏洞扫描器工具

    XSpear是一款基于RubyGems的的XSS漏洞扫描器。拥有常见的XSS漏洞扫描攻击测试功能。还可进行参数分析。
    的头像 发表于 01-17 09:28 1242次阅读

    ie浏览器限制运行脚本

    的安全。在本文中,我将详细介绍IE浏览器限制运行脚本的各个方面和原因。 首先,IE浏览器限制运行脚本的一个主要原因是为了防止跨站脚本攻击(Cross-Site Scripting,
    的头像 发表于 11-26 11:19 749次阅读

    常见网络攻击与防御方法

    反射型是将脚本代码放在URL中,当用户点击URL,该请求就会通过服务器解析返回给浏览器,在返回的响应内容中出现攻击者的XSS代码,浏览器执行时就会中招了。
    的头像 发表于 03-28 10:57 182次阅读