安全指引


XSS 攻击媒介


"One of your code blocks includes unescaped HTML"

上述这段信息是 Highlight.js 在检测到潜在的 XSS 攻击媒介时,其在你的 web 控制台中显示的内容,你会看到以下打印:

One of your code blocks includes unescaped HTML. This is a potentially serious security risk.

https://github.com/highlightjs/highlight.js/wiki/security

[<HTML element in question>]

未转义 HTML

此警告信息表示你页面上的代码块包含未转义的 HTML:

<pre><code class="language-html">
  <h1>This is a header</h1>
</code></pre>

请看上面代码中的 h1 标签,那是问题所在。

代码块内的目标 HTML 代码(即需要高亮处理的代码部分)都应进行 html 转义:

<pre><code class="lang-html">
  &lt;h1&gt;This is a header&lt;/h1&gt;
</code></pre>

示例中 <> 字串都需要替换成它们所对应的 HTML 转义符。

参阅:

FAQ


有什么危害?

未转义 HTML 可能引起 XSS 攻击相关的安全漏洞,即攻击者会把他们的 HTML(或 JavaScript)嵌入你的执行程序中,然后要做什么事情恐怕就只有他们自己才知道了。

如何修复?

从你所有的 pre/code 代码块中将未转义的 HTML 删除掉。

我能关闭警告信息吗?

可以,我们的文档中有相关说明。不过对于大多数用户而言我们不应该这么去做,因为仅仅关闭警告并不能解决漏洞,一旦攻击发生,你的程序依然处于危险之中。

假如我真的真的真的想要在我的高亮代码中混入原始 HTML 怎么办?

我们依然不会在核心代码中支持这一项功能。事实上,在 code 标签内包含原始 HTML(即便符合 HTML 规范),这项功能也不会进入我们的计划之内,因为这太容易搬起石头砸自己的脚了。而对于少数有这项需求的朋友,可以轻松通过添加个插件实现。要是有人能够更新先前的 HTML merge 插件并维护、支持它,我们欢迎这么去做。其中你需要用到的插件挂载位置在 before:highlightElement 这儿。