安全指引
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">
<h1>This is a header</h1>
</code></pre>
示例中 < 和 > 字串都需要替换成它们所对应的 HTML 转义符。
参阅:
- https://github.com/highlightjs/highlight.js/issues/2886
- https://www.acunetix.com/blog/articles/preventing-xss-attacks/
FAQ
有什么危害?
未转义 HTML 可能引起 XSS 攻击相关的安全漏洞,即攻击者会把他们的 HTML(或 JavaScript)嵌入你的执行程序中,然后要做什么事情恐怕就只有他们自己才知道了。
如何修复?
从你所有的 pre/code 代码块中将未转义的 HTML 删除掉。
我能关闭警告信息吗?
可以,我们的文档中有相关说明。不过对于大多数用户而言我们不应该这么去做,因为仅仅关闭警告并不能解决漏洞,一旦攻击发生,你的程序依然处于危险之中。
假如我真的真的真的想要在我的高亮代码中混入原始 HTML 怎么办?
我们依然不会在核心代码中支持这一项功能。事实上,在 code 标签内包含原始 HTML(即便符合 HTML 规范),这项功能也不会进入我们的计划之内,因为这太容易搬起石头砸自己的脚了。而对于少数有这项需求的朋友,可以轻松通过添加个插件实现。要是有人能够更新先前的 HTML merge 插件并维护、支持它,我们欢迎这么去做。其中你需要用到的插件挂载位置在 before:highlightElement 这儿。