文档开发者中心
我的

XSS攻击

一、概念与危害:

1、XSS攻击基本原理:通过恶意输入,向Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入Web中的Script代码会被执行,从而达到恶意攻击用户的目的。

简单XSS注入案例:

<input type='text' value=''><script>alert('XSS');</script>'><button>搜索</button><div>

2、危害

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

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

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

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

(5)网页挂马;

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

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

(8)获取客户端信息,例如用户的浏览历史、真实IP、开放端口等;

(9)控制受害者机器向其他网站发起攻击;

(10)结合其他漏洞,如CSRF漏洞,实施进一步作恶;

(11)提升用户权限,包括进一步渗透网站;

(12)传播跨站脚本蠕虫等;

二、XSS攻击类型:

1、存储型 XSS

存储型 XSS 的攻击步骤:

  1. 攻击者将恶意代码提交到目标网站的数据库中。

  2. 用户打开目标网站时,网站服务端将恶意代码从数据库取出,拼接在 HTML 中返回给浏览器。

  3. 用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行。

  4. 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。

这种攻击常见于带有用户保存数据的网站功能,如论坛发帖、商品评论、用户私信等。

举个例子:前端发送请求,将后台返回的值拼接到html中显示,如果后台从数据库中取数据没有经过验证,前端输出时也没有验证,(返回字段值为:'as</script><script>alert('XSS!')</script>')那么将会执行这段脚本。

2、反射型 XSS

反射型 XSS 的攻击步骤:

  1. 攻击者构造出特殊的 URL,其中包含恶意代码。

  2. 用户打开带有恶意代码的 URL 时,网站服务端将恶意代码从 URL 中取出,拼接在 HTML 中返回给浏览器。

  3. 用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行。

  4. 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。

反射型 XSS 漏洞常见于通过 URL 传递参数的功能,如网站搜索、跳转等。由于需要用户主动打开恶意的 URL 才能生效,攻击者往往会结合多种手段诱导用户点击。POST 的内容也可以触发反射型 XSS,只不过其触发条件比较苛刻(需要构造表单提交页面,并引导用户点击),所以非常少见。(将敏感操作请求方法设为Post可以增加XSS攻击难度)

3、DOM 型 XSS:不需要服务端的参与,恶意代码仅在客户端进行传递和解析

DOM 型 XSS 的攻击步骤:

  1. 攻击者构造出特殊的 URL,其中包含恶意代码。

  2. 用户打开带有恶意代码的 URL。

  3. 用户浏览器接收到响应后解析执行,前端 JavaScript 取出 URL 中的恶意代码并执行。

  4. 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。

4、区别

反射型 XSS 跟存储型 XSS 的区别是:存储型 XSS 的恶意代码存在数据库里,反射型 XSS 的恶意代码存在 URL 里。

DOM 型 XSS 跟前两种 XSS 的区别:DOM 型 XSS 攻击中,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞,而其他两种 XSS 都属于服务端的安全漏洞。

三、注入点

  1. 在 HTML 中内嵌的文本中,恶意内容以 script 标签形成注入。

  2. 在内联的 JavaScript 中,拼接的数据突破了原本的限制(字符串,变量,方法名等)。

  3. 在标签属性中,恶意内容包含引号,从而突破属性值的限制,注入其他属性或者标签。

  4. 在标签的 href、src 等属性中,包含 等可执行代码。

  5. 在 onload、onerror、onclick 等事件中,注入不受控制代码。

  6. 在 style 属性和标签中,包含类似 background-image:url('…'); 的代码(新版本浏览器已经可以防范)。

  7. 在 style 属性和标签中,包含类似 …) 的 CSS 表达式代码(新版本浏览器已经可以防范)。

总之一句话:不要相信所有的外部数据(输入与输出)

四、防范手段(前端主要防止DOM XSS)

  1. 如果前端使用了React/Vue等框架(不能使用dangerousSetInnerHtml/v-html),可以避免前端渲染阶段的XSS。(React Dom在渲染前会转义JSX嵌入的任何值)

  2. 对于HTML模板进行转义,但是不同的上下文需要使用不同的转义规则,对于开发人员来说,自定义转义增加了开发难度(可以使用转义库,但是还是要自己选择转义规则)。

  3. 对于输入内容做校验,以及限定长度,这样无法完全防止XSS,但是可以增加XSS攻击的难度。

  4. 使httpOnly Cookie,禁止JS读取Cookie,这样就算XSS注入之后,也无法读取到Cookie值。

  5. Content Security Policy

  • 禁止加载外域代码,防止复杂的攻击逻辑。

  • 禁止外域提交,网站被攻击后,用户的数据不会泄露到外域。

  • 禁止内联脚本执行(规则较严格,目前发现 GitHub 使用)。

  • 禁止未授权的脚本执行(新特性,Google Map 移动版在使用)。

五、React可能会存在的XSS漏洞:

1、使用JSON.stringgfy将JavaScript对象转化为JSON,然后以全局变量的形式插入到页面中。

<script>

window.__INITIAL_STATE__ = ${JSON.stringify(initialState)};

</script>

2、使用dangerousSetInnerHtml跳过XSS保护。


点赞
收藏
回复
分享
举报
浏览601 发布于2019-11-06 16:01未知归属地
全部评论
最多点赞
最新发布
最早发布
暂无评论
暂无评论
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要发帖子

了解社区公约,与您携手共创和谐专业的开发者社区。