前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >XSS跨站脚本攻击剖析与防御

XSS跨站脚本攻击剖析与防御

原创
作者头像
第59号实验室
发布2023-07-28 15:40:24
3000
发布2023-07-28 15:40:24
举报
文章被收录于专栏:企业安全企业安全

01

XSS跨站脚本介绍

跨站脚本(Cross-Site Scripting,XSS)是一种经常出现在Web应用程序中的计算机安全漏洞,是由于Web应用程序对用户的输入过滤不足而产生的。攻击者利用网站漏洞把恶意的脚本代码(通常包括HTML代码和客户端Javascript脚本)注入到网页之中,当其他用户浏览这些网页时,就会执行其中的恶意代码,对受害者可能采取Cookie资料窃取、会话劫持、钓鱼欺骗等各种攻击。

XSS跨站脚本攻击本身对Web服务器没有直接危害,它借助网站进行传播,使网站的大量用户受到攻击。攻击者一般通过留言、电子邮件或其他途径向受害者发送一个精心构造的恶意URL,当受害者在Web浏览器中打开该URL的时候,恶意脚本会在受害者的计算机上悄悄运行,流程如图所示:

图片
图片

02

XSS的危害

1.网络钓鱼,包括盗取各类用户账号;

2.窃取用户cookies资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作;

3.劫持用户(浏览器)会话,从而执行任意操作,例如进行非法转账、强制发表日志、发送电子邮件等;

4.强制弹出广告页面、刷流量等;

5.网页挂马;

6.进行恶意操作,例如任意篡改页面信息、删除文章等;

7.进行大量的客户端攻击,如DDoS攻击;

8.结合其他漏洞,如CSRF漏洞,实施进一步作恶;

9.传播跨站脚本蠕虫等。

03

XSS的原理及案例

XSS根据其特性和利用手法的不同,只要分成两大类型:一种是反射型跨站脚本;另一种是持久型跨站脚本。

1.反射型XSS

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

http://www.test.com/search.php?key=”><script>alter(“XSS”)</script>

http://www.test.com/logout.asp?out=1&ur1=javascript:alert(document.cookie)

反射型XSS的利用一般是攻击者通过特定手法(比如利用电子邮件),诱惑用户去访问一个包含恶意代码的URL,当受害者单击这些专门设计的链接的时候,恶意JavaScript代码会直接在受害者主机上的浏览器执行。它的特点是只在用户单击时触发,而且只执行一次,非持久化,所以称为反射型跨站式脚本。

反射型XSS的攻击流程如图所示:

图片
图片

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

如下为反射型XSS的一个案例:当在该网站的姓名提交框内输入恶意的JavaScript脚本时,点击提交按钮,便出现了反射型XSS攻击,如图所示:

图片
图片
图片
图片

反射型XSS的危害往往不如持久型XSS,因为恶意代码暴露在URL参数中,并且时刻要求用户单击方可触发,稍微有点安全意识的用户可以轻易看穿链接是不可信任的。如此一来,反射型XSS攻击的成本要比持久型XSS高得多。

2.持久型XSS

持久型跨站脚本也等于存储型跨站脚本,比反射型跨站脚本更具威胁性,并且可能影响到Web服务器自身的安全。

此类XSS不需要用户单击特定的URL就能执行跨站脚本,攻击者事先将恶意JavaScript代码上传或存储到漏洞服务器中,只要受害者浏览包含此恶意JavaScript代码的页面就会执行恶意代码。

持久型XSS的攻击流程如图所示:

图片
图片

持久型XSS一般出现在网站的留言、评论。博客日志等交互处,恶意脚本被存储到客户端或者服务器的数据库中,当其他用户浏览该网页时,站点即从数据库中读取恶意用户存入的非法数据,然后显示在页面中,即在受害者主机上的浏览器执行恶意代码。

如下为持久型XSS的一个案例:当攻击者在留言框内输入恶意JavaScript代码并提交后,其他用户再浏览这个页面时,就会发生持久型XSS攻击,如图所示:

图片
图片
图片
图片

持久型XSS不需要用户去单击URL进行触发,所以他的危害比反射型XSS大,黑客可以利用它渗透网站、挂马、钓鱼……

04

XSS防御方案

XSS 漏洞是由于对用户提交的数据没有经过严格的过滤处理造成的,所以防御的原则就是不相信用户输入的数据,对输入进行过滤,对输出进行编码。

1.使用XSS Filter

对用户提交的信息进行有效的验证,仅接受指定长度范围内的,采用适当格式的内容提交,阻止或者忽略此外的其他任何数据。此外,还需过滤有效的和净化有害的输入。

例如:

▻ 表单数据指定值的类型:年龄只能是 int 、name 只能是字母数字等。

▻ 过滤或移除特殊的 html 标签:<script>、<iframe>等。

▻ 过滤 js 事件的标签:onclick、onerror、onfocus等。

2.使用编码(HTMLEncode)

HTML编码在防止XSS攻击上可以起到很大的作用,它主要是用对应的HTML实体替代字面量字符,这样做可确保浏览器安全处理可能存在的恶意字符,将其当做HTML文档的内容而非结构加以处理。

一些常见的可能造成问题的字符的HTML编码如表所示:

图片
图片

3、JavaScript编码

这条原则主要针对动态生成的JavaScript代码,这包括脚本部分以及HTML标签的事件处理属性(如onerror, onload等)。在往JavaScript代码里插入数据的时候,只有一种情况是安全的,那就是对不可信数据进行JavaScript编码,并且只把这些数据放到使用引号包围起来的值部分(data value)之中,除了上面的那些转义之外,还要附加上下面的转义: 

\ 转成 \\

/ 转成 \/

; 转成 ;(全角;)

4、Http Only cookie

许多 XSS 攻击的目的就是为了获取用户的cookie,将重要的 cookie 标记为http only,这样的话当浏览器向服务端发起请求时就会带上cookie字段,但是在脚本中却不能访问 cookie,这样就避免了XSS攻击利用JavaScript的document.cookie获取cookie。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
安全攻防对抗服务
安全攻防对抗服务(Cybersecurity Attack-Defense Confrontation)基于腾讯安全专家能力及多年的攻防对抗经验构建。面向对安全能力有较高要求的企业用户,在用户授权后,通过实战模拟 APT 攻击的手法,对企业信息化资产以及可能产生危害的安全风险进行测试。通过多维度、多视角的安全攻防对抗,动态检测企业安全防护的整体水位。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档