XSS注入

135 阅读5分钟

XSS(Cross Site Script)名字的由来

XSS注入为跨站脚本攻击注入,其英文Cross Site Script的缩写是CSS,与层叠样式表相冲,为了避免语义混淆,取XSS来代表跨站脚本攻击

XSS(Cross Site Script)原理

XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScriptActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。

XSS(Cross Site Script)特点

  1. 多样性:攻击方式多种多样,包括反射型、存储型和 DOM 型等。
  2. 隐蔽性:通常难以被察觉,用户在不知情的情况下就可能受到攻击。
  3. 广泛性:可影响各种类型的网站和 Web 应用程序。
  4. 危害性:能窃取用户的敏感信息,如登录凭证、信用卡号等;还可以劫持用户会话、进行欺诈活动、篡改页面内容等。
  5. 易传播性:通过社交网络、电子邮件等渠道快速传播。
  6. 利用浏览器漏洞:常常利用浏览器的安全漏洞来执行恶意脚本。
  7. 绕过防御机制:攻击者会不断寻找新的方法来绕过网站的安全防御机制。

XSS(Cross Site Script)类型

  1. 反射型 XSS:攻击者通过构造恶意链接,当用户点击这个链接时,恶意脚本会作为请求参数的一部分被服务器接收,并立即返回嵌入了恶意脚本的响应页面。比如,您收到一个带有奇怪参数的网址链接,一点击,您的浏览器就执行了恶意脚本。
  2. 存储型 XSS:恶意脚本被直接存储在服务器端(比如数据库、文件系统等)。无论哪个用户访问相关页面,都会加载并执行这个恶意脚本。就好像服务器的某个地方一直藏着“坏东西”,谁来都能碰到。
<?php  
$username = $_GET['username'];  
echo $username; 
  1. 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)防御措施

  1. 输入验证:对用户输入的数据进行严格检查和过滤,只允许合法的字符和格式。比如,限制只接受字母、数字等特定类型的输入。
  2. 输出编码:在将用户输入的数据显示到网页上时,对特殊字符进行编码,使其无法被解释为可执行的脚本。例如,把 < 转换为 < ,把 > 转换为 > 。
  3. 使用安全的库和框架:许多成熟的 Web 开发框架都有内置的 XSS 防御机制,使用它们可以减少漏洞风险。
  4. 内容安全策略(CSP):通过设置浏览器的策略,限制网页可以加载的资源来源,防止恶意脚本的注入和执行。
  5. 定期安全测试:包括代码审查、漏洞扫描等,及时发现和修复可能存在的 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漏洞

  1.  输入验证和清理:对用户输入的数据进行严格的验证和过滤。只允许合法的字符和格式,去除或转义可能用于注入脚本的特殊字符,如  < 、 > 、 " 、 ' 、 &  等。
  2.  输出编码:在将用户输入的数据显示到网页上时,对其进行适当的编码。例如,将 HTML 特殊字符转换为对应的 HTML 实体,如  <  转换为  <  , >  转换为  >  等。
  3.  使用安全的 API:使用编程语言和框架提供的安全函数和 API 来处理用户输入和输出,避免手动处理时出现错误。
  4.  设置 HTTP 响应头:设置合适的 HTTP 响应头,如  Content-Security-Policy  ,来限制页面可以加载和执行的资源,增强安全性。
  5.  定期安全测试:使用自动化的安全扫描工具和进行手动的安全测试,及时发现和修复新出现的 XSS 漏洞。
  6.  员工培训:对开发人员进行安全培训,提高他们对 XSS 漏洞的认识和防范意识,确保在开发过程中遵循安全最佳实践。

参考文献:XSS攻击_百度百科 (baidu.com)XSS攻击绕过方法大全,XSS攻击技巧,收集100种绕过方法分享(2024最新) - 知乎 (zhihu.com),作者:知乎用户UHFZLR