什么是XSS攻击


XSS跨站脚本攻击(Cross Site Scripting),不写为CSS是为了避免和层叠样式表(Cascading Style Sheets)的缩写混淆,所以将跨站脚本攻击写为XSS

一、XSS原理

XSS是指攻击者通过向Web页面里面插入客户端脚本,通常是JavaScript编写的恶意代码,当用户浏览这个被嵌入恶意代码的页面时,就会运行被插入的JavaScript代码,达到攻击者的目的。

XSS 攻击类似于 SQL 注入攻击,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的。

从上述内容可知,XSS 属于被动式且用于客户端的攻击方式。受害者最终是用户。 不要以为受害者是用户,就认为跟自己的网站、服务器安全没有关系。但请注意,千万不要忘记网站管理人员也属于用户之一,这就意味着 XSS 可以攻击“服务器端”。因为管理员要比普通用户的权限大得多,一般管理员都可以对网站进行文件管理、数据管理等操作,而攻击者就有可能靠管理员身份作为“跳板”实施攻击。

二、XSS类型

XSS攻击主要分成三类反射型存储型DOM型

1、反射型XSS

反射型XSS 也被称为 非持久型XSS,是现在最容易出现的一种XSS漏洞。

当用户访问一个带有XSS 代码的 URL 请求时,服务器端接收数据后处理,然后把带有 XSS代码的数据发送到浏览器,浏览器解析这段带有 XSS 代码的数据后,最终造成 XSS 漏洞。这个过程就像一次射,故称为反射型XSS。

2、存储型 XSS

存储型 XSS 又被称为 持久性 XSS,存储型 XSS 是最危险的一种跨站脚本。

允许用户存储数据的 Web 应用程序都可能会出现存储型XSS漏洞,当攻击者提交一段 XSS代码后,被服务器端接收并存储,当攻击者再次访问某个页面时,这段 XSS 代码被程序读出来响应给浏览器,造成XSS 跨站攻击,这就是存储型XSS。

存储型 XSS 与反射型 XSS、DOM 型 XSS相比,具有更高的隐蔽性,危害性也更大。它们之间最大的区别在于反射型 XSS 与DOM 型 XSS 执行都必须依靠用户手动去触发,而存储型XSS 却不需要

3、DOM型 XSS

DOM的全称为Document Object Model,即文档对象模型,DOM通常用于代表在HTMLXHTMLXML中的对象。使用DOM可以允许程序和脚本动态地访问和更新文档的内容、结构和样式。

通过JavaScript可以重构整个HTML页面,而要重构页面或者页面中的某个对象,JavaScript就需要知道HTML文档中所有元素的“位置”。而DOM为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构。根据DOM规定,HTML文档中的每个成分都是一个节点。

DOM的规定如下:

  • 整个文档是一个文档节点
  • 每个HTML标签是一个元素节点
  • 包含在HTML元素中的文本是文本节点
  • 每一个HTML属性是一个属性节点
  • 节点和节点之间都有等级关系

HTML的标签都是一个个节点,而这些节点组成了DOM的整体结构。

简单了解了DOM后,再来看看 DOM型XSS就比较简单了。

可以发现,DOM本身就代表文档的意思,而基于DOM型XSS是不需要与服务器端交互的,它只发生在客户端处理数据阶段。

三、总结

XSS攻击可以简单划分为两类:非持久型XSS攻击持久型XSS攻击

非持久型XSS攻击:顾名思义,非持久型XSS攻击是一次性的,仅对当次的页面访问产生影响。非持久型XSS攻击要求用户访问一个被攻击者篡改后的链接,用户访问该链接时,被植入的攻击脚本被用户游览器执行,从而达到攻击目的。

持久型XSS攻击:持久型XSS,会把攻击者的数据存储在服务器端,攻击行为将伴随着攻击数据一直存在。

详细可分为三类:

反射型XSS:经过后端,不经过数据库

存储型XSS:经过后端,经过数据库

DOM型XSS:不经过后端,DOM- XSS是通过url传入参数去控制触发的。

四、解决方法

1、对传入参数的非法的 HTML 代码包括单双引号等进行转义。

2、通过正则表达式过滤传入参数的HTML 标签来防范XSS攻击


文章作者: 弈心
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 弈心 !
评论
  目录