autofocus属性的自创标签xss(xss)
字数 1060 2025-08-20 18:18:04
Chrome中利用autofocus属性的XSS攻击技术详解
概述
本文档详细讲解如何利用Chrome浏览器中autofocus属性的特殊行为实现XSS攻击的技术。该技术利用了Chrome的一个特性:autofocus可以与所有HTML标签一起使用,而不仅仅是表单元素。
技术原理
在标准HTML中,autofocus属性通常只用于表单元素(如input、select等)。但Chrome浏览器中存在一个特性,允许autofocus与任何HTML元素配合使用,当元素获得焦点时会触发onfocus事件,从而可以执行任意JavaScript代码。
攻击方法
1. 使用已有标准HTML标签
<iframe autofocus onfocus=alert(1)>
<a autofocus onfocus=alert(23) href=#>x</a>
特点:
- 利用标准HTML标签
- 添加
autofocus使元素自动获得焦点 - 触发
onfocus事件执行JS代码
2. 使用tabindex属性
任何HTML元素都可以通过tabindex属性获得焦点能力:
<xss tabindex=1 onfocus=alert(1) autofocus>
要点:
tabindex值为正数时,元素可被聚焦- 结合
autofocus实现自动触发
3. 使用contenteditable属性
contenteditable属性使元素可编辑,同时也使其可获得焦点:
<xss onfocus=alert(23) autofocus contenteditable>
注意:
contenteditable即使没有赋值(空字符串)也有效- 默认会使元素可编辑
4. 使用-webkit-user-modify样式
非标准但Chrome支持的CSS属性:
<xss style="-webkit-user-modify:read-write" onfocus=alert(1) autofocus>
或:
<xss style="-webkit-user-modify:read-write-plaintext-only" onfocus=alert(1) autofocus>
说明:
-webkit-user-modify不是标准CSS属性- 但在Chrome中仍可使用
- 设置后可编辑状态使元素可获得焦点
应用场景
- 绕过用户交互要求:在需要用户交互才能触发的XSS场景中,使用
autofocus可以自动触发 - 突破元素上下文限制:当无法从当前元素上下文逃逸时,可利用此技术
- 自定义标签利用:即使使用非标准标签也能生效
防御措施
- 严格过滤HTML标签的
autofocus属性 - 对
onfocus等事件处理器进行过滤 - 限制
tabindex、contenteditable等属性的使用 - 过滤非标准CSS属性如
-webkit-user-modify - 使用CSP(Content Security Policy)限制脚本执行
总结
该技术利用了Chrome浏览器对autofocus属性的宽松处理,结合各种可获得焦点的HTML特性,实现了无需用户交互的XSS攻击。防御时需要从HTML属性、事件处理器和CSS属性等多方面进行综合防护。