前端安全(一)XSS攻击

1 简述

  • XSS,跨站脚本攻击(Cross Site Scripting),为避免和CSS缩写同名,缩写为XSS
  • XSS通常是指攻击者利用网页开发的漏洞,植入恶意的代码指令到网页中并使用户加载并执行,恶意的脚本指令大多为JS,但也可以是Java、VBScript、HTML等。恶意的脚本执行后,攻击者可以获得私密的网页内容、会话和cookie等各种内容,以及获得更高的页面操作权限
  • XSS本质就是恶意的脚本代码和正常的代码混杂在一起,浏览器无法分辨,导致恶意脚本执行

2 XSS分类

2.1 存储型XSS攻击

会经常发生在内容驱动、用户保存数据的社区网站上,比如具备论坛发帖、商品评论、用户私信等功能的网站,危害比较大,可以说是永久型的

  • 攻击者事先将恶意脚本代码提交到目标网站服务端数据库内(通过用户提交时夹杂脚本代码)
  • 当用户打开该目标网站时,服务端将恶意代码取出拼接HTML返回给浏览器
  • 用户浏览器接收到响应后立即执行,而恶意的脚本代码也被自动执行,从而冒充用户,窃取用户数据发送到攻击者网站,或者调用接口执行其他操作
    前端安全(一)XSS攻击

2.2 反射型XSS攻击

反射型XSS漏洞常见于具有通过URL传递参数的功能网站,如网站搜索、跳转等,需要引导用户主动打开URL,和存储型XSS攻击的区别是反射型存储在URL中,存储型存储在数据库中

  • 攻击者通过混杂入恶意脚本构造恶意的URL
  • 用户点击打开含有恶意脚本的URL,网站服务端将恶意代码从URL中取出,拼接在HTML返回给浏览器
  • 用户接收到后,浏览器执行恶意代码,同上,窃取用户数据或者调取接口执行操作
    前端安全(一)XSS攻击

2.3 DOM型XSS

DOM型XSS攻击主要是前端浏览器直接取出恶意代码,而前两者是由后端先取出再拼接返回。

  • 攻击者利用恶意脚本构造恶意URL
  • 用户直接点开恶意的URL,浏览器响应后直接解析执行,前端JS取出URL并执行
  • 浏览器执行恶意代码,同上,窃取用户数据或者调取接口执行操作

比如是诱导用户点击后往img标签src属性里插入恶意脚本等

以上三种XSS攻击主要都是要攻击者构造恶意的脚本执行攻击,存储型和反射型主要是后端安全问题,DOM型主要是前端安全问题

2.4 通用型XSS

通用型XSS,UXSS,主要是浏览器和浏览器扩展漏洞造成产生XSS并执行代码的XSS攻击,浏览器的漏洞到被官方发现解决都要有一段时间,并且许多的浏览器扩展程序漏洞更多,这一过程很有可能被用于UXSS。
比如一些浏览器扩展漏洞可以造成从外部获取数据填充网页表单,伪造文件访问邮件网站设置添加转发地址等

2.5 突变型XSS

突变型XSS,MXSS,大概是用户提供的原本是安全的文本信息,但一些意外的变化,可能使得原本正常的标签等不再是正常的,浏览器执行的时候会出现意外的情况
大多数MXSS是通过恶意脚本拼接在innerHTML中,通过意外的转义各种情况导致恶意的攻击
详见这一次,彻底理解XSS攻击

3 XSS攻击的预防

XSS攻击有两大要素

  • 攻击者提交恶意代码
  • 浏览器执行恶意代码

3.1 输入过滤

过滤调用户输入时攻击者伪造的脚本的代码,但攻击者绕开前端输入直接构造请求就可以避免掉

3.2 前端渲染时代码和数据分开

在前端渲染的过程中,明确告诉浏览器,下面要设置的内容是文本(.innerText),还是属性(.setAttribute),还是样式(.style)等等。浏览器不会被轻易的被欺骗,执行预期外的代码了。并在JS中,可以使用textContent或者innerText的地方,尽量不使用innerHTML;

3.3 预防DOM型XSS攻击

主要是防止JS把不可信的数据当作代码执行,尽量使用 .textContent、.setAttribute(),减少使用.innerHTML、.outerHTML、document.write()

3.4 转义HTML

把 & < > " ’ / 这几个字符转义掉,不过只对于HTML标签文字内容和属性值有效,其他的CSS内联样式,内联JSON无效,也可以使用一些完善的转义库进行转义

美团XSS
这一次,彻底理解XSS攻击

上一篇:【网络安全】如何使用ppmap检测和利用XSS漏洞


下一篇:网络与安全-安全