加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

前端安全系列:如何防止XSS攻击?

发布时间:2018-10-23 10:30:01 所属栏目:业界 来源:佚名
导读:【新产物上线啦】51CTO播客,随时随地,碎片化进修 前端安详 跟着互联网的高速成长,信息安详题目已经成为企业最为存眷的核心之一,而前端又是激发企业安详题目的高危据点。在移动互联网期间,前端职员除了传统的 XSS、CSRF 等安详题目之外,又时常遭遇收集

修复后的代码如下:

  1. <script>  
  2. var initData = <%= escapeEmbedJSON(data.toJSON()) %> 

通过这个变乱,小明进修到了如下常识:

  •  HTML 转义长短常伟大的,在差异的环境下要回收差异的转义法则。假如回收了错误的转义法则,很有也许会埋下 XSS 隐患。
  •  该当只管停止本身写转义库,而该当回劳绩熟的、业界通用的转义库。

裂痕总结

小明的例子讲完了,下面我们来体系的看下 XSS 有哪些注入的要领:

  •  在 HTML 中内嵌的文本中,恶意内容以 script 标签形成注入。
  •  在内联的 JavaScript 中,拼接的数据打破了本来的限定(字符串,变量,要领名等)。
  •  在标签属性中,恶意内容包括引号,从而打破属性值的限定,注入其他属性可能标签。
  •  在标签的 href、src 等属性中,包括 javascript: 等可执行代码。
  •  在 onload、onerror、onclick 等变乱中,注入不受节制代码。
  •  在 style 属性和标签中,包括相同 background-image:url("javascript:..."); 的代码(新版本赏识器已经可以防御)。
  •  在 style 属性和标签中,包括相同 expression(...) 的 CSS 表达式代码(新版本赏识器已经可以防御)。

总之,假如开拓者没有将用户输入的文本举办吻合的过滤,就贸然插入到 HTML 中,这很轻易造成注入裂痕。进攻者可以操作裂痕,结构出恶意的代码指令,进而操作恶意代码危害数据安详。

XSS 进攻的分类

通过上述几个例子,我们已经对 XSS 有了一些熟悉。

什么是 XSS

Cross-Site Scripting(跨站剧本进攻)简称 XSS,是一种代码注入进攻。进攻者通过在方针网站上注入恶意剧本,使之在用户的赏识器上运行。操作这些恶意剧本,进攻者可获取用户的敏感信息如 Cookie、SessionID 等,进而危害数据安详。

为了和 CSS 区分,这里把进攻的第一个字母改成了 X,于是叫做 XSS。

XSS 的本质是:恶意代码未颠末滤,与网站正常的代码混在一路;赏识器无法判别哪些剧本是可信的,导致恶意剧本被执行。

而因为直接在用户的终端执行,恶意代码可以或许直接获取用户的信息,可能操作这些信息假充用户向网站提倡进攻者界说的哀求。

在部门环境下,因为输入的限定,注入的恶意剧本较量短。但可以通过引入外部的剧本,并由赏识器执行,来完成较量伟大的进攻计策。

这里有一个题目:用户是通过哪种要领“注入”恶意剧本的呢?

不只仅是营业上的“用户的 UGC 内容”可以举办注入,包罗 URL 上的参数等都可所以进攻的来历。在处理赏罚输入时,以下内容都不行信:

  •  来自用户的 UGC 信息
  •  来自第三方的链接
  •  URL 参数
  •  POST 参数
  •  Referer (也许来自不行信的来历)
  •  Cookie (也许来自其他子域注入)

XSS 分类

按照进攻的来历,XSS 进攻可分为存储型、反射型和 DOM 型三种。

  •  存储区:恶意代码存放的位置。
  •  插入点:由谁取得恶意代码,并插入到网页上。

存储型 XSS

存储型 XSS 的进攻步调:

  1.  进攻者将恶意代码提交到方针网站的数据库中。
  2.  用户打开方针网站时,网站处事端将恶意代码从数据库取出,拼接在 HTML 中返回给赏识器。
  3.  用户赏识器吸取到相应后理会执行,混在个中的恶意代码也被执行。
  4.  恶意代码窃取用户数据并发送到进攻者的网站,可能假充用户的举动,挪用方针网站接口执行进攻者指定的操纵。

这种进攻常见于带有效户生涯数据的网站成果,如论坛发帖、商谈论论、用户私信等。

反射型 XSS

反射型 XSS 的进攻步调:

  1.  进攻者结构出非凡的 URL,个中包括恶意代码。
  2.  用户打开带有恶意代码的 URL 时,网站处事端将恶意代码从 URL 中取出,拼接在 HTML 中返回给赏识器。
  3.  用户赏识器吸取到相应后理会执行,混在个中的恶意代码也被执行。
  4.  恶意代码窃取用户数据并发送到进攻者的网站,可能假充用户的举动,挪用方针网站接口执行进攻者指定的操纵。

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

反射型 XSS 裂痕常见于通过 URL 转达参数的成果,如网站搜刮、跳转等。

因为必要用户主动打开恶意的 URL 才气见效,进攻者每每会团结多种本领诱导用户点击。

POST 的内容也可以触发反射型 XSS,只不外其触发前提较量苛刻(必要结构表单提交页面,并引导用户点击),以是很是少见。

DOM 型 XSS

DOM 型 XSS 的进攻步调:

  1.  进攻者结构出非凡的 URL,个中包括恶意代码。
  2.  用户打开带有恶意代码的 URL。
  3.  用户赏识器吸取到相应后理会执行,前端 JavaScript 取出 URL 中的恶意代码并执行。
  4.  恶意代码窃取用户数据并发送到进攻者的网站,可能假充用户的举动,挪用方针网站接口执行进攻者指定的操纵。

DOM 型 XSS 跟前两种 XSS 的区别:DOM 型 XSS 进攻中,取出和执行恶意代码由赏识器端完成,属于前端 JavaScript 自身的安详裂痕,而其他两种 XSS 都属于处事端的安详裂痕。

XSS 进攻的提防

通过前面的先容可以得知,XSS 进攻有两大体素:

  1.  进攻者提交恶意代码。
  2.  赏识器执行恶意代码。

针对第一个要素:我们是否可以或许在用户输入的进程,过滤掉用户输入的恶意代码呢?

输入过滤

在用户提交时,由前端过滤输入,然后提交到后端。这样做是否可行呢?

谜底是不行行。一旦进攻者绕过前端过滤,直接结构哀求,就可以提交恶意代码了。

那么,换一个过滤机缘:后端在写入数据库前,对输入举办过滤,然后把“安详的”内容,返回给前端。这样是否可行呢?

我们举一个例子,一个正常的用户输入了 5 < 7 这个内容,在写入数据库前,被转义,酿成了 5 &lt; 7。

题目是:在提交阶段,我们并不确定内容要输出到那边。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读