跳转至

HTML 实体编码

什么是 HTML 实体编码?

HTML 实体编码用于在 HTML 中表示特殊字符,避免它们被浏览器当成标签、属性或语法符号解析。

例如小于号 < 在 HTML 中可以写成:

&lt;

浏览器显示时仍然是 <。

常见实体

字符 实体名称 十进制实体 十六进制实体
< &lt; &#60; &#x3C;
> &gt; &#62; &#x3E;
& &amp; &#38; &#x26;
" &quot; &#34; &#x22;
' &apos; &#39; &#x27;
空格 &nbsp; &#160; &#xA0;

三种常见写法

命名实体

&lt;script&gt;

解码为:

<script>

十进制数字实体

&#102;&#108;&#97;&#103;

对应 ASCII 十进制:

102 108 97 103 -> flag

十六进制数字实体

&#x66;&#x6c;&#x61;&#x67;

对应十六进制:

66 6c 61 67 -> flag

示例

编码文本:

flag&#123;html_entity&#125;

其中:

实体 字符
&#123; {
&#125; }

解码后:

flag{html_entity}

常见变形

  • 省略分号,例如 &#x66; 在某些场景也可能被解析。
  • 十进制和十六进制混用。
  • 与 URL 编码混合,例如 %26%23x66%3B 解 URL 后是 &#x66;。
  • 反复实体编码,例如 &amp;lt; 解一次是 &lt;,再解一次是 <。

CTF 识别要点

  • 出现大量 &...;、&#...;、&#x...;。
  • Web 页面源码、HTML 注释、参数回显中常见。
  • 如果解码后仍有实体形式,可能需要多次解码。
  • 可与 XSS、过滤绕过、Unicode、URL 编码组合出现。