safe.URL
Syntax
safe.URL INPUT
Returns
template.URL
Alias
safeURL
safeURL将提供的字符串声明为“安全”的URL或URL子字符串(见RFC 3986)。来自可信源的javascript:checkThatFormNotEditedBeforeLeavingPage()这样的URL应该出现在页面中,但默认情况下会过滤动态javascript: URL,因为它们是经常被利用的注入向量。
没有safeURL,Go模板只会认定http:、https:和mailto:这些URI方案是安全的。如果检测到其他任何URI方案(例如irc:和javascript:),整个URL将被替换为#ZgotmplZ。这是为了通过将其变得无用来消除URL中的任何潜在攻击。
以下示例使用了具有以下菜单条目的站点hugo.toml:
hugo.
menu:
main:
- name: 'IRC: #golang at freenode'
url: irc://irc.freenode.net/#golang
[menu]
[[menu.main]]
name = 'IRC: #golang at freenode'
url = 'irc://irc.freenode.net/#golang'
{
"menu": {
"main": [
{
"name": "IRC: #golang at freenode",
"url": "irc://irc.freenode.net/#golang"
}
]
}
}
以下是与前文示例配合使用的侧边栏局部模板的示例:
该局部模板将生成以下HTML输出:
<!-- 此无序列表可能是边栏菜单的一部分 -->
<ul>
<li><a href="#ZgotmplZ">IRC: #golang at freenode</a></li>
</ul>
可以通过将.URL页面变量添加 | safeURL来修复奇怪的输出:
通过将.URL页面变量通过safeURL过滤,我们可以得到所需的输出:
<ul class="sidebar-menu">
<li><a href="irc://irc.freenode.net/#golang">IRC: #golang at freenode</a></li>
</ul>