雨笋教育小编今日这篇分享:关于XSS漏洞攻击的案例分析,本文除了概念介绍,还详细举了两个案例,接下来就往下文看看吧!
通过使用基于HTML解析逻辑的特殊HTML标签,可以实现跨站脚本(XSS)攻击,即使在使用词法解析器过滤危险内容的情况下也是如此。利用这些类型的XSS漏洞的主要目标,就是让净化型词法解析器将数据视为文本数据,而不是计算机指令(例如,JavaScript指令)。当HTML解析器和净化型词法解析器没有以相同的方式解析数据时,就有可能导致这种类型的攻击。
关键概念介绍
注意:对本文来说,我们假定读者已经接触过XSS(更准确的说是JavaScript注入)方面的知识,并且对HTML有基本的了解。要想了解更多的入门知识,请参阅之雨笋教育的公众号:雨笋君。
针对XSS漏洞的保护措施
实际上,针对XSS漏洞的保护措施有多种形式。比如,早期的防御措施,就是利用正则表达式(regex)来检查用户输入的“危险”字符串。一个简化的例子是,如果用户提供的输入包含
<script>
,那么,就通过正则表达式找到该字符串并将其删除。然而,这种基于正则表达式的XSS保护措施经常出现失误,因为可以通过各种方法构造出能够顺利绕过正则表达式的JavaScript代码串。对于上面的例子来说,只需将
<script>
中的一个字母变为大写(如
<scRipt>
),就可以绕过这种过滤器,从而导致XSS攻击。因此,我们不建议使用正则表达式过滤器来防御XSS。所以,让我们来谈谈更好的解决方案。上下文输出编码是另一种XSS保护形式,它会将特殊字符(如“<”和“>”)转化为无害的HTML编码输出(例如,“
<
”和“
>
”)。这种形式的保护将用户的输入放在源文件中,以确保所有可能导致JavaScript执行或HTML渲染的JavaScript或HTML可用字符都转换为不危险的HTML实体编码形式。这是处理在应用程序中呈现的用户输入的好方法;事实上,许多现代前端框架都会默认进行输出编码(例如,ReactJS和Angular)。然而,这种形式的保护会对应用程序施加某些限制,也就是禁止用户使用某些支持富文本的HTML特性。如果用户需要支持某些HTML特性,如图片、链接和富文本等,那该怎么办呢?这就是词法解析发挥作用的地方。
通过词法解析防御XSS攻击
词法解析是一种非常复杂的XSS防御手段,因为它在执行额外的逻辑(如对数据进行分块或编码)之前,会评估数据是指令还是明文。抽象的说,词法解析可以被描述为将用户数据(即不危险的文本内容)与计算机指令(即JavaScript和某些危险的HTML标签)分离开来的过程。在想让用户使用HTML子集的情况下,这种类型的解析可以用来确定哪些是允许的内容,哪些将被阻止或过滤掉。
上面所说的想