LEXSS: 绕过词法解析过程中的安全机制

雨笋教育小编今日这篇分享:关于XSS漏洞攻击的案例分析,本文除了概念介绍,还详细举了两个案例,接下来就往下文看看吧!

通过使用基于HTML解析逻辑的特殊HTML标签,可以实现跨站脚本(XSS)攻击,即使在使用词法解析器过滤危险内容的情况下也是如此。利用这些类型的XSS漏洞的主要目标,就是让净化型词法解析器将数据视为文本数据,而不是计算机指令(例如,JavaScript指令)。当HTML解析器和净化型词法解析器没有以相同的方式解析数据时,就有可能导致这种类型的攻击。

关键概念介绍

注意:对本文来说,我们假定读者已经接触过XSS(更准确的说是JavaScript注入)方面的知识,并且对HTML有基本的了解。要想了解更多的入门知识,请参阅之雨笋教育的公众号:雨笋君。

针对XSS漏洞的保护措施

实际上,针对XSS漏洞的保护措施有多种形式。比如,早期的防御措施,就是利用正则表达式(regex)来检查用户输入的“危险”字符串。一个简化的例子是,如果用户提供的输入包含

<script>

,那么,就通过正则表达式找到该字符串并将其删除。然而,这种基于正则表达式的XSS保护措施经常出现失误,因为可以通过各种方法构造出能够顺利绕过正则表达式的JavaScript代码串。对于上面的例子来说,只需将

<script>

中的一个字母变为大写(如

<scRipt>

),就可以绕过这种过滤器,从而导致XSS攻击。因此,我们不建议使用正则表达式过滤器来防御XSS。所以,让我们来谈谈更好的解决方案。上下文输出编码是另一种XSS保护形式,它会将特殊字符(如“<”和“>”)转化为无害的HTML编码输出(例如,“

&lt;

”和“

&gt;

”)。这种形式的保护将用户的输入放在源文件中,以确保所有可能导致JavaScript执行或HTML渲染的JavaScript或HTML可用字符都转换为不危险的HTML实体编码形式。这是处理在应用程序中呈现的用户输入的好方法;事实上,许多现代前端框架都会默认进行输出编码(例如,ReactJS和Angular)。然而,这种形式的保护会对应用程序施加某些限制,也就是禁止用户使用某些支持富文本的HTML特性。如果用户需要支持某些HTML特性,如图片、链接和富文本等,那该怎么办呢?这就是词法解析发挥作用的地方。

通过词法解析防御XSS攻击

词法解析是一种非常复杂的XSS防御手段,因为它在执行额外的逻辑(如对数据进行分块或编码)之前,会评估数据是指令还是明文。抽象的说,词法解析可以被描述为将用户数据(即不危险的文本内容)与计算机指令(即JavaScript和某些危险的HTML标签)分离开来的过程。在想让用户使用HTML子集的情况下,这种类型的解析可以用来确定哪些是允许的内容,哪些将被阻止或过滤掉。

上面所说的想

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值