常见的跨站脚本攻击(XSS)利用与检测原理

112 阅读9分钟

什么是 跨站脚本 (XSS)

跨站脚本(也称为 XSS)是一种 Web 安全漏洞,它破坏用户与应用程序的交互。跨站点脚本漏洞通常允许攻击者伪装成受害者用户,执行用户能够执行的任何操作,并访问用户的任何数据。如果受害者用户在应用程序中具有特权访问权限,则攻击者可能能够完全控制应用程序的所有功能和数据。

XSS 是如何产生的

跨站点脚本就是操纵易受攻击的 Web 站点,使其将恶意 JavaScript 返回给用户。当恶意代码在受害者的浏览器中执行时,攻击者可以完全破坏受害者与应用程序的交互。

如何确认是否存在 XSS漏洞

XSS 漏洞通常发生在应用程序未能正确验证或转义用户输入时,导致恶意代码被注入到网页中并由浏览器执行。因为生成 HTML 的过程中,HTML语法中含有特殊意义的字符(元字符)没有被正确处理结果导致 HTML或 JavaScript 被肆意注入,从而使得原先的HTML结构产生变化。为了消除元字符的特殊意义,将其转化为普通字符,就需要用到转义(Escape)处理。HTML的转义处理对于消除 XSS 至关重要。

在确认 XSS 漏洞时,alert() 函数是一个常用的工具。alert() 函数会弹出一个对话框,显示指定的消息,并等待用户点击“确定”按钮。由于其简短、无害且易于识别的特点,alert() 函数常被用于测试 XSS 漏洞。在谷歌的浏览器版本中,禁止了跨域 iframe 中的 alert() 调用。可以使用print() 函数替代。当 print() 函数被调用时,它会打开打印对话框,这同样可以用来确认 XSS 漏洞的存在。

XSS 攻击有哪些类型

反射型 XSS

其中恶意脚本来自当前 HTTP 请求。

当应用程序在 HTTP 请求中接收数据并以不安全的方式将该数据包含在即时响应中时,就会出现这种情况。

1、website.com/status?mess….

2、

Status: All is well.

该应用程序不执行任何其他数据处理,因此攻击者可以轻松构建如下攻击:

1、website.com/status?mess…/

2、

Status: 

当用户访问攻击者构建的上述 URL,则攻击者的脚本将在用户的浏览器中执行,在该用户与应用程序的会话上下文中执行。此时,脚本可以执行用户有权访问的任何操作,并检索任何数据。

攻击者还可以通过多种方式诱使受害者用户发出他们控制的请求,以提供反射型 XSS 攻击。这些操作包括在攻击者控制的网站上放置链接,或放置在允许生成内容的其他网站上,或者通过电子邮件、推文或其他消息发送链接。攻击可以直接针对已知用户,也可以是针对应用程序的任何用户的攻击。

存储型 XSS

恶意脚本来自网站的数据库。

存储型 XSS(也称为持久 XSS 或二阶 XSS)是指应用程序从不受信任的来源接收数据,并以不安全的方式将该数据包含在其后续的 HTTP 响应中。

有些数据可能会通过 HTTP 请求提交给应用程序;例如,对博客文章的评论、聊天室中的用户昵称或客户订单上的联系人详细信息。数据还可能来自其他不受信任的来源;例如,显示通过 SMTP 接收的消息的 Web 邮件应用程序,显示社交媒体帖子的营销应用程序,或显示来自网络流量的数据包数据的网络监视应用程序。

基于 DOM 的 XSS

其中漏洞存在于客户端代码而不是服务器端代码中。

基于 DOM 的 XSS(也称为 DOM XSS)是指应用程序包含一些客户端 JavaScript,这些 JavaScript 以不安全的方式处理来自不受信任的来源的数据,通常是将数据写回 DOM。

一般情况下输入字段将从 HTTP 请求的一部分(例如 URL 查询字符串参数)填充,从而允许攻击者以与反射型 XSS 相同的方式使用恶意 URL 进行攻击。

XSS 可以用来做什么

1、冒充或伪装成受害者用户。

2、执行用户能够执行的任何操作。

3、读取用户能够访问的任何数据。

4、捕获用户的登录凭证。

5、对网站执行虚拟污损。

6、将特洛伊木马程序功能注入网站。

如何查找和检测 XSS 漏洞

XSS 漏洞都可以使用 Web 漏洞扫描程序快速可靠地找到。在采用 CSP 的应用程序包含类似 XSS 的行为,则 CSP 可能会阻止利用此漏洞。可以绕过 CSP 以利用潜在漏洞。(内容安全策略 (CSP) 是一种浏览器机制,旨在减轻跨站点脚本和其他一些漏洞的影响。)

在由于输入过滤器或其他防御措施而无法进行完整的跨站点脚本利用的情况下悬空标记注入技术跨域捕获数据。它通常可以被用来捕获其他用户可见的敏感信息,包括可用于代表用户执行未经授权的操作的 CSRF 令牌。

Tips:

1、XSS 和 CSRF 有什么区别?

XSS 涉及导致网站返回恶意 JavaScript,而 CSRF 涉及诱使受害者用户执行他们不打算执行的操作。

2、XSS 和 SQL 注入有什么区别?

XSS 是针对其他应用程序用户的客户端漏洞,而 SQL 注入是针对应用程序数据库的服务器端漏洞。

3、如何在 PHP 中防止 XSS?

使用允许的字符白名单过滤您的输入,并使用类型提示或类型转换。对于 HTML 上下文,使用 htmlentities 和 ENT_QUOTES 或 JavaScript 上下文使用 JavaScript Unicode 转义来转义您的输出。

4、如何在 Java 中防止 XSS?

使用允许字符的白名单过滤您的输入,并使用 Google Guava 等库对 HTML 上下文的输出进行 HTML 编码,或对 JavaScript 上下文使用 JavaScript Unicode 转义。

image.png

德迅云安全---安全加速SCDN

AI+行为分析检测

OWASP TOP 10防御的基础上,引入AI防御能力,提高漏洞检出率,降低安全事件误报率,快速响应安全威胁。

安全能力开放

全面开放自定义规则安全能力,引入语义解析引擎,用户可以通过正则或者字符串的方式,自定义安全防护策略,满足个性化防御需求。

安全可视化

默认提供详细报表分析、全量日志查询和告警功能,全面了解业务带宽使用情况,业务安全情况,快速决策和处置安全问题。

高可靠、高可用的服务

后端自动监控业务可靠性,动态调度,提供高可靠、高可用的WAF防护服务。

产品功能

Web攻击防护

OWASP TOP 10威胁防护: 有效防御 SQL注入、XSS攻击、命令/代码执行、文件包含、木马上传、路径穿越、恶意扫描等OWASP TOP 10攻击。专业的攻防团队7*24小时跟进0day漏洞,分析漏洞原理,并制定安全防护策略,及时进行防护。

****智能语义解析引擎 提供智能语义解析功能,在漏洞防御的基础上,增强SQL注入和XSS攻击检测能力。

AI检测和行为分析: 通过对德迅云积累海量日志进行学习和训练输出多种Web安全防护模型,对用户多请求的多元因子进行智能分析,有效提高检出率,降低误报率;通过信息孤岛、行为检测分析,识别恶意攻击源,保护网站安全。

应用层DDoS防护

CC、HTTP Flood攻击防御

****威胁情报库 通过大数据分析平台,实时汇总分析攻击日志,提取攻击特征并进行威胁等级评估,形成威胁情报库。
个性化策略配置: 如请求没有命中威胁情报库中的高风险特征,则通过IP黑白名单、访问频率控制等防御攻击。
日志自学习: 实时动态学习网站访问特征,建立网站的正常访问基线。
人机校验: 当请求与网站正常访问基线不一致时,启动人机校验(如JS验证、META验证等)方式进行验证,拦截攻击。

慢连接攻击防御: 对Slow Headers攻击,通过检测请求头超时时间、最大包数量阈值进行防护。
对Slow Post攻击,通过检测请求小包数量阈值进行防护。

合规性保障

自定义防护规则: 用户可以对HTTP协议字段进行组合,制定访问控制规则,支持地域、请求头、请求内容设置过滤条件,支持正则语法。

网页防篡改: 采用强制静态缓存锁定和更新机制,对网站特定页面进行保护,即使源站相关网页被篡改,依然能够返回给用户缓存页面。

访问日志审计: 记录所有用户访问日志,对访问源进行TOP N,提供趋势分析,可以根据需要提供日志下载功能。

数据防泄漏: 对response报文进行处理,对响应内容和响应进行识别和过滤,根据需要设置数据防泄漏规则,保护网站数据安全。

HTTP流量管理

支持HTTP流量管理: 可以设置源IP或者特点接口访问速率,对超过速率的访问进行排队处理,减缓服务器压力。

请求头管理: 可以根据业务需要对请求头和响应头进行处理,可进行请求头替换或者敏感信息隐藏设置。

安全可视化

四大安全分析报表: 默认提供Web安全攻击报表、CC攻击防护报表、用户访问统计报表和自定义规则命中报表,满足业务汇报和趋势分析需求。

全量日志处理: 提供全量日志查询和下载功能,可以通过OpenAPI接口获取实时日志或离线日志信息。

实时数据统计: 提供基于均值和峰值带宽统计信息,提供攻击带宽和正常占比,随时关注业务状况。提供多种组件,了解业务监控和核心指标变化情况。