XSS(Cross-Site Scripting,跨站脚本攻击)是指恶意攻击者在目标网站注入恶意脚本,使得用户在访问该网站时被攻击者控制。XSS攻击是目前最常见的Web安全问题之一,攻击者通过XSS攻击可以窃取用户的敏感信息,如账号密码、Cookie等,或者利用XSS攻击进行其它恶意行为。为了防止XSS攻击,web开发中应该采用严格的输入过滤和输出转义等措施。
然而,不少网站对XSS攻击的防护不够严密,XSS攻击仍屡屡得手。其中,XSS绕过技术是攻击者经常使用的手段之一。本篇文章将为大家总结几种XSS绕过技术及相应的防御措施。
一、XSS绕过技术总结
1.各种编码绕过
2.标签间的空格、回车、缩进漏洞绕过
3.各种事件绑定
4.伪协议绕过
5.各种浏览器兼容性
6.文件上传
二、示例说明
1. 编码绕过示例
常见的编码绕过包括HTML实体编码、URL编码、JavaScript编码等。攻击者可以利用编码绕过绕过网站输入过滤,成功注入恶意代码。以下将以HTML实体编码绕过为例。
原始代码:
<input type="text" name="search" value="<?php echo trim(htmlspecialchars($_GET['search'])); ?>" />
攻击者在搜索框中输入<img src=x onerror=alert('XSS')>
,得到的HTML源码如下:
<input type="text" name="search" value="<img src=x onerror=alert('XSS')>" />
该网站使用了HTML实体编码将<
符号编码为<
,将>
符号编码为>
。然而,攻击者可以通过使用十进制或十六进制的ASCII码,绕过HTML实体编码。比如,下面的代码将会直接在网站页面弹出恶意代码的弹框:
"><svg/onload=alert(1)>//
最终得到的HTML源码如下:
<input type="text" name="search" value="" /><svg/onload=alert(1)>//"">
为了防止编码绕过,网站应当使用安全的输出转义方法,如htmlspecialchars等。
2.标签间空格绕过示例
在HTML标签里面增加空格并不会改变其语法意义,因此攻击者可以通过标签间空格绕过网站输入过滤,注入恶意代码。以下将以标签间空格绕过为例。
原始代码:
<div id="xss"><?php echo trim($_GET['content']); ?></div>
攻击者在请求中输入以下代码:
<scr ipt>alert(1)</scr ipt>
得到的HTML源码如下:
<div id="xss"><scr ipt>alert(1)</scr ipt></div>
该网站没有对用户输入内容进行过滤,将用户的输入作为HTML代码输出。然而,攻击者在输入<scr ipt>
时,利用了标签间空格绕过的漏洞。也就是说,攻击者在输入时,将<script>
标签用空格分隔成两个标签:<scr
和ipt>
。由于浏览器对标签间的空格处理不一致,有的会自动忽略,有的则会将空格放入标签内部。因此,攻击者成功地绕过了输入过滤,注入了恶意代码。
为了防止标签间空格绕过漏洞,网站应当在输入过滤时,使用严格的正则表达式匹配过滤,不允许任何标签间带有空格。同时,也应该采用严格的输出转义方式,如htmlspecialchars等。
三、总结
通过对XSS绕过技术的分析,我们可以得出以下防御措施:
(1)输入过滤:在前端、后台和数据库都进行输入过滤,严格限制用户的输入;
(2)输出转义:对于所有从用户端输入的内容,采用严格的输出转义方式,如htmlspecialchars等,以避免输出时被解析为HTML代码;
(3)HTTPS、HTTPOnly、Secure等安全策略:使用HTTPS协议,设置HTTPOnly、Secure等安全策略,避免Cookie泄漏,进一步增强网站的安全性。
希望通过本篇文章的阅读,大家对XSS攻击和防御有了更深入的理解,同时也能在实际开发中采用有效的防御措施,提高网站的安全性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:XSS绕过技术 XSS插入绕过一些方式总结 - Python技术站