如何指示来自 post 的安全链接

How to indicate safe links from post

我想 link 使用 post 中的 file:///path/to/file 的文件,但是 link 由于安全检查而消失了:

[my link](file:///path/to/file)

如何在 post 上允许此 link?

这种使用情况似乎没有记录在案:

使用短代码的解决方案

为了解决我 created a shortcode 命名为 file_link.html:

的问题
<a href="file://{{ .Get 1 | safeURL }}">{{ .Get 0 }}</a>

这样我就可以在 post:

的主体上使用了
{{< file_link "this text is shown" "/path/to/file" >}}

相当于:

[this text is shown](file:///path/to/file )

解决方案 1 – 覆盖默认 link 渲染

您可以通过在 layouts/_default/_markup/render-link.html 中创建一个文件来告诉 Goldmark(渲染器)它应该如何渲染 links (see docs)。这段代码应该有所帮助,只要确保它呈现它应该呈现的所有内容(请参阅提到的文档,您可以在文件中使用哪些变量):

<!-- layouts/_default/_markup/render-link.html -->
<a href="{{ .Destination | safeURL }}">{{ .Text }}</a>

请注意,这里的魔法是由 safeURL 函数 (documentation) 引起的。如果你只想在URL以file://开头时使用safeURL函数,你可以这样做:

<!-- layouts/_default/_markup/render-link.html -->
{{ if hasPrefix .Destination "file://" }}
    <a href="{{ .Destination | safeURL }}">{{ .Text }}</a>
{{ else }}
    <a href="{{ .Destination }}">{{ .Text }}</a>
{{ end }}

解决方案 2 – 在配置中启用不安全渲染(不推荐)

您还可以通过更新配置文件(分别是 Goldmark 渲染器设置)启用所有可能不安全的 link(以及 HTML)的渲染,如下例所示。在 this part of Hugo docs.

中搜索 unsafe 字段

您不应该使用它,除非它是您唯一可以接受的解决方案。它允许渲染 URLs 像 javascript:unsafeFunction() 或 HTML 标签,这可能不是你想要允许的。

TOML 语法 (config.toml)

[markup]
    [markup.goldmark]
        [markup.goldmark.renderer]
            unsafe = true

YAML 语法 (config.yml)

markup:
  goldmark:
    renderer:
      unsafe: true