九维团队-绿队(改进)| XSS漏洞介绍与防御(下)

admin 2023年5月15日18:32:54评论33 views字数 4331阅读14分26秒阅读模式

九维团队-绿队(改进)| XSS漏洞介绍与防御(下)

阅读该文章上半部分请点击九维团队-绿队(改进)| XSS漏洞介绍与防御(上)

4、事件对象

1.常量

静态变量

描述

DOM

CAPTURING-PHASE

当前事件阶段为捕获阶段(1)

1

AT-TARGET

当前事件是目标阶段,在评估目标事件(1)

2

BUBBLING-PHASE

当前的事件为冒泡阶段 (3)

3

2,属性

属性

描述

DOM

bubbles

返回布尔值,指示事件是否是起泡事件类型。

2

cancelable

返回布尔值,指示事件是否可拥可取消的默认动作。

2

currentTarget

返回其事件监听器触发该事件的元素。

2

eventPhase

返回事件传播的当前阶段。

2

target

返回触发此事件的元素(事件的目标节点)。

2

timeStamp

返回事件生成的日期和时间。

2

type

返回当前 Event 对象表示的事件的名称。

2

3.方法

方法

描述

DOM

initEvent()

初始化新创建的 Event 对象的属性。

2

preventDefault()

通知浏览器不要执行与事件关联的默认动作。

2

stopPropagation()

不再派发事件。

2

3.1 目标事件对象

方法

方法

描述

DOM

addEventListener()

允许在目标事件中注册监听事件(IE8 = attachEvent())

2

dispatchEvent()

允许发送事件到监听器上 (IE8 = fireEvent())

2

removeEventListener()

运行一次注册在事件目标上的监听事件(IE8 = detachEvent())

2

3.2 事件监听对象

方法

方法

描述

DOM

handleEvent()

把任意对象注册为事件处理程序

2

3.3 文档事件对象

方法

方法

描述

DOM

createEvent()

2

3.4 鼠标/键盘事件对象

属性

属性

描述

DOM

altKey

返回当事件被触发时,"ALT" 是否被按下。

2

button

返回当事件被触发时,哪个鼠标按钮被点击。

2

clientX

返回当事件被触发时,鼠标指针的水平坐标。

2

clientY

返回当事件被触发时,鼠标指针的垂直坐标。

2

ctrlKey

返回当事件被触发时,"CTRL" 键是否被按下。

2

Location

返回按键在设备上的位置

3

charCode

返回 onkeypress 事件触发键值的字母代码。

2

key

在按下按键时返回按键的标识符。

3

keyCode

返回 onkeypress 事件触发的键的值的字符代码,或者 onkeydown onkeyup 事件的键的代码。

2

which

返回 onkeypress 事件触发的键的值的字符代码,或者 onkeydown onkeyup 事件的键的代码。

2

metaKey

返回当事件被触发时,"meta" 键是否被按下。

2

relatedTarget

返回与事件的目标节点相关的节点。

2

screenX

返回当某个事件被触发时,鼠标指针的水平坐标。

2

screenY

返回当某个事件被触发时,鼠标指针的垂直坐标。

2

shiftKey

返回当事件被触发时,"SHIFT" 键是否被按下。

2

方法

方法

描述

W3C

initMouseEvent()

初始化鼠标事件对象的值

2

initKeyboardEvent()

初始化键盘事件对象的值

六、XSS的绕过方式
1、JavaScript伪协议
javascript:alert(/xss/);<a href=javascript:alert(1)>111</a><!--引号可以去掉--><!--支持伪协议的属性有:href,lowsrc,bgsound,background,action,dynsrc--><!-- 好多浏览器都不支持了,a标签还支持,但是需要点击才能生效-->

*左右滑动查看更多

2、编码

浏览器在解析 HTML 文档时无论按照什么顺序,主要有三个过程:HTML 解析、JS 解析和 URL 解析,每个解析器负责 HTML 文档中各自对应部分的解析工作。

首先浏览器接收到一个 HTML 文档时,会触发 HTML 解析器对 HTML 文档进行词法解析,这一过程完成 HTML 解码并创建 DOM 树,接下来 JavaScript 解析器会。介入对内联脚本进行解析,这一过程完成 JS 的解码工作,如果浏览器遇到需要 URL 的上下文环境,这时 URL 解析器也会介入完成 URL 的解码工作,URL 解析器的解码顺序会根据 URL 所在位置不同,可能在 JavaScript 解析器之前或之后解析。

浏览器的解析规则:浏览器收到 HTML 内容后,会从头开始解析。当遇到 JS 代码时,会使用 JS 解析器解析。当遇到 URL 时,会使用 URL 解析器解析。遇到 CSS 则用 CSS 解析器解析。尤其当遇到复杂代码时,可能该段代码会经过多个解析器解析。

<img src=# onerror="alert##x28/xss/##x29"><img src=# onerror="alert##x000000000028/xss/##x29"><!--首先经过HTML解析将alert##x28/xss/##x29"解析为alert(1),然后JS解析器解析后执行alert(1),导致弹窗。然后第二个payload中##x000000000028不管有多少个0,HTML解析器都会正常解析,绕WAF的时候非常有用--><img src=# onerror="u0061lert(/xss/)"><!--首先经过HTML解析,然后JS解析器成功将u0061lert(/xss/)解析为alert(/xss/)所以能弹窗 但是用 Unicode 转义序列来表示一个控制字符时,例如单引号、双引号、圆括号等等,它们将不会被解释成控制字符,而仅仅被解码并解析为标识符名称或者字符串常量--><a href="javascript:%61lert%281%29">xss</a><!--首先经过HTML解析,因为href会涉及到URL所以会先进行URL解析,将%61lert%281%29解析为alert(1)最后再经过JS解析器成功解析alert(1)URL 解析过程中有一个细节了,不能对协议类型进行任何的编码操作,否则URL解析器会认为它无类型-->

*左右滑动查看更多

双写

大小写

一些案例

<img src=# onerror="location=&#39;javascript:alert(1)&#39;"><img src=# onerror="location=&#39;javascript:%61lert%281%29&#39;"><img src=# onerror="location=&#39;jx61vascript:%61lert%281%29&#39;"><img src=# onerror="locu0061tion=&#39;jx61vascript:%61lert%281%29&#39;"><img src=# onerror="locu0061tion=&#39;java&#39;+&#39;scri&#39;+&#39;pt:&#39;+&#39;ale&#39;+&#39;rt%281%29&#39;">

*左右滑动查看更多

七、XSS防御措施
1、输入验证和过滤
用户输入进行严格的验证和过滤,确保输入的数据符合预期格式。
使用可信任的输入过滤库或框架,如OWASP Java Encoder或ESAPI,对用户输入进行编码或过滤,以防止恶意脚本注入。

2、输出编码
在将用户输入输出到Web页面前,对输出进行适当的编码,以确保浏览器将其视为纯文本而不是可执行的代码。
使用HTML实体编码或JavaScript函数进行输出编码,将特殊字符转换为对应的实体或转义序列。

3、内容安全策略(Content Security Policy,CSP)
使用CSP可以限制浏览器加载和执行的内容源,防止恶意脚本的注入。
在HTTP响应头中设置CSP策略,限制允许加载的脚本、样式表和其他资源的来源。

下面是一些具体的安全配置示例,可用于防范XSS漏洞:

输入验证和过滤的安全配置示例:

使用OWASP Java Encoder对用户输入进行HTML实体编码:

String encodedInput = Encoder.forHtml(input);

*左右滑动查看更多

使用ESAPI库对用户输入进行过滤和编码:

String filteredInput = ESAPI.encoder().canonicalize(input);

*左右滑动查看更多

输出编码的安全配置示例:

在JSP页面中使用JSTL的 <c:out> 标签进行HTML实体编码输出:

<c:out value="${userInput}" escapeXml="true" />

*左右滑动查看更多

在Java代码中使用HTML实体编码进行输出:

String encodedOutput = StringEscapeUtils.escapeHtml4(output);

*左右滑动查看更多

内容安全策略(Content Security Policy,CSP)的安全配置示例:

在HTTP响应头中添加CSP策略:

Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'

*左右滑动查看更多

以上示例演示了一些常用的防范XSS漏洞的安全配置措施,但具体的安全措施应根据应用程序的特定需求和架构进行调整和定制。在实施防御措施时,开发人员应综合考虑输入验证、输出编码和CSP等多个层面的安全防护。此外,持续进行安全漏洞扫描和代码审查,并及时更新应用程序和相关依赖的版本,以确保最新的安全修复得到应用。

八、小结
XSS漏洞是Web应用程序常见的安全漏洞之一,攻击者通过注入恶意脚本代码,利用用户浏览器执行该代码,从而造成安全威胁。为了防范XSS漏洞,开发人员应采取一系列安全措施,包括输入验证和过滤、输出编码以及内容安全策略(CSP)。以上提供的具体安全配置示例可以帮助开发人员更好地保护Web应用程序免受XSS攻击。然而,每个应用程序都有其特定的需求和架构,因此安全措施需要根据实际情况进行调整和定制。

参考链接

https://www.runoob.com/jsref/dom-obj-event.html

注:文中部分图片来源于网络


往期回顾

九维团队-绿队(改进)| XSS漏洞介绍与防御(下)

九维团队-绿队(改进)| XSS漏洞介绍与防御(下)

九维团队-绿队(改进)| XSS漏洞介绍与防御(下)

九维团队-绿队(改进)| XSS漏洞介绍与防御(下)

九维团队-绿队(改进)| XSS漏洞介绍与防御(下)

九维团队-绿队(改进)| XSS漏洞介绍与防御(下)

关于安恒信息安全服务团队
安恒信息安全服务团队由九维安全能力专家构成,其职责分别为:红队持续突破、橙队擅于赋能、黄队致力建设、绿队跟踪改进、青队快速处置、蓝队实时防御,紫队不断优化、暗队专注情报和研究、白队运营管理,以体系化的安全人才及技术为客户赋能。

九维团队-绿队(改进)| XSS漏洞介绍与防御(下)

九维团队-绿队(改进)| XSS漏洞介绍与防御(下)

九维团队-绿队(改进)| XSS漏洞介绍与防御(下)

原文始发于微信公众号(安恒信息安全服务):九维团队-绿队(改进)| XSS漏洞介绍与防御(下)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年5月15日18:32:54
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   九维团队-绿队(改进)| XSS漏洞介绍与防御(下)https://cn-sec.com/archives/1734594.html

发表评论

匿名网友 填写信息