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>