HUGO

  • 新闻
  • 文档
  • 主题
  • 社区
  • GitHub
gohugoio 加星
  • 关于
    • 本节内容
    • 简介
    • 特性
    • 隐私
    • 安全
    • 许可证
  • 安装
    • 本节内容
    • macOS
    • Linux
    • Windows
    • BSD
  • 入门
    • 本节内容
    • 快速开始
    • 基本用法
    • 目录结构
    • 配置
    • 配置标记
    • 配置构建
    • 术语表
    • 外部学习资源
  • 快速参考
    • 本节内容
    • 表情符号
    • 函数
    • 方法
    • 页面集合
  • 内容管理
    • 本节内容
    • 组织
    • 页面包
    • 内容格式
    • 前言
    • 构建选项
    • 页面资源
    • 图像处理
    • 短代码
    • 相关内容
    • 章节
    • 内容类型
    • 原型
    • 分类
    • 摘要
    • 链接和交叉引用
    • URL 管理
    • 菜单
    • 评论
    • 多语言
    • Markdown 属性
    • 语法高亮
    • 图表
    • 数学
    • 数据源
    • 内容适配器
  • 模板
    • 本节内容
    • 简介
    • 模板类型
    • 查找顺序
    • 基础模板
    • 主页模板
    • 单页模板
    • 章节模板
    • 分类模板
    • 术语模板
    • 局部模板
    • 内容视图模板
    • 短代码模板
    • 站点地图模板
    • RSS 模板
    • 404 模板
    • robots.txt 模板
    • 菜单
    • 分页
    • 嵌入式模板
    • 自定义输出格式
  • 函数
    • 本节内容
    • cast
    • collections
    • compare
    • crypto
    • css
    • data
    • debug
    • diagrams
    • encoding
    • fmt
    • global
    • go template
    • hash
    • hugo
    • images
    • inflect
    • js
    • lang
    • math
    • openapi3
    • os
    • partials
    • path
    • reflect
    • resources
    • safe
    • strings
    • templates
    • time
    • transform
    • urls
  • 方法
    • 本节内容
    • Duration
    • Menu
    • Menu entry
    • Page
    • Pager
    • Pages
    • Resource
    • Shortcode
    • Site
    • Taxonomy
    • Time
  • 渲染钩子
    • 本节内容
    • 简介
    • 块引用
    • 代码块
    • 标题
    • 图像
    • 链接
    • 透传
    • 表格
  • 短代码
    • 本节内容
    • 评论
    • 详细信息
    • 图表
    • Gist
    • 高亮
    • Instagram
    • Param
    • QR
    • Ref
    • Relref
    • Vimeo
    • X
    • YouTube
  • Hugo 模块
    • 本节内容
    • 配置 Hugo 模块
    • 使用 Hugo 模块
    • 主题组件
  • Hugo Pipes
    • 本节内容
    • 简介
    • 将 Sass 转译为 CSS
    • PostCSS
    • 后处理
    • JavaScript 构建
    • 资源压缩
    • 连接资源
    • 指纹识别和 SRI 哈希
    • 来自字符串的资源
    • 来自模板的资源
  • CLI
  • 故障排除
    • 本节内容
    • 审计
    • 日志
    • 检查
    • 弃用
    • 性能
    • 常见问题解答
  • 开发者工具
    • 本节内容
    • 编辑器插件
    • 前端
    • 搜索
    • 迁移
    • 其他项目
  • 托管和部署
    • 本节内容
    • Hugo 部署
    • 使用 Rclone 部署
    • 使用 Rsync 部署
    • 在 21YunBox 上托管
    • 在 AWS Amplify 上托管
    • 在 Azure Static Web Apps 上托管
    • 在 Cloudflare Pages 上托管
    • 在 Firebase 上托管
    • 在 GitHub Pages 上托管
    • 在 GitLab Pages 上托管
    • 在 KeyCDN 上托管
    • 在 Netlify 上托管
    • 在 Render 上托管
  • 贡献
    • 本节内容
    • 开发
    • 文档
    • 主题
  • 维护
关于

安全模型

Hugo 安全模型的概述。

运行时安全

Hugo 生成静态输出,因此一旦构建完成,运行时就是浏览器(假设输出是 HTML)以及您集成的任何服务器 (API)。

但在开发和构建您的网站时,运行时是 hugo 可执行文件。保护运行时可能是一个 真正的挑战。

Hugo 的主要方法是沙箱化和具有严格默认值的安全策略

  • Hugo 有一个虚拟文件系统,只允许主项目(而不是第三方组件)挂载项目根目录之外的目录或文件。
  • 用户定义的组件对文件系统具有只读访问权限。
  • 我们会调用一些外部二进制文件来支持 Asciidoctor 和类似的文件,但这些二进制文件及其标志是预定义的,并且默认情况下处于禁用状态(请参阅安全策略)。运行任意外部 OS 命令的通用函数已被 讨论,但由于安全问题而未实现。

安全策略

Hugo 有一个内置的安全策略,限制对 os/exec、远程通信和类似内容的访问。

下面列出了默认配置。任何使用安全策略的允许列表之外的功能的构建都会失败,并显示有关需要执行的操作的详细消息。这些设置中的大多数都是允许列表(字符串或切片,正则表达式或与任何内容都不匹配的 none)。

hugo。
     
security:
  enableInlineShortcodes: false
  exec:
    allow:
    - ^(dart-)?sass(-embedded)?$
    - ^go$
    - ^git$
    - ^npx$
    - ^postcss$
    - ^tailwindcss$
    osEnv:
    - (?i)^((HTTPS?|NO)_PROXY|PATH(EXT)?|APPDATA|TE?MP|TERM|GO\w+|(XDG_CONFIG_)?HOME|USERPROFILE|SSH_AUTH_SOCK|DISPLAY|LANG|SYSTEMDRIVE)$
  funcs:
    getenv:
    - ^HUGO_
    - ^CI$
  http:
    mediaTypes: null
    methods:
    - (?i)GET|POST
    urls:
    - .*
[security]
  enableInlineShortcodes = false
  [security.exec]
    allow = ['^(dart-)?sass(-embedded)?$', '^go$', '^git$', '^npx$', '^postcss$', '^tailwindcss$']
    osEnv = ['(?i)^((HTTPS?|NO)_PROXY|PATH(EXT)?|APPDATA|TE?MP|TERM|GO\w+|(XDG_CONFIG_)?HOME|USERPROFILE|SSH_AUTH_SOCK|DISPLAY|LANG|SYSTEMDRIVE)$']
  [security.funcs]
    getenv = ['^HUGO_', '^CI$']
  [security.http]
    methods = ['(?i)GET|POST']
    urls = ['.*']
{
   "security": {
      "enableInlineShortcodes": false,
      "exec": {
         "allow": [
            "^(dart-)?sass(-embedded)?$",
            "^go$",
            "^git$",
            "^npx$",
            "^postcss$",
            "^tailwindcss$"
         ],
         "osEnv": [
            "(?i)^((HTTPS?|NO)_PROXY|PATH(EXT)?|APPDATA|TE?MP|TERM|GO\\w+|(XDG_CONFIG_)?HOME|USERPROFILE|SSH_AUTH_SOCK|DISPLAY|LANG|SYSTEMDRIVE)$"
         ]
      },
      "funcs": {
         "getenv": [
            "^HUGO_",
            "^CI$"
         ]
      },
      "http": {
         "mediaTypes": null,
         "methods": [
            "(?i)GET|POST"
         ],
         "urls": [
            ".*"
         ]
      }
   }
}

默认情况下,Hugo 允许 resources.GetRemote 函数下载具有与内部允许列表对应的媒体类型的文件。要将媒体类型添加到允许列表

hugo。
     
security:
  http:
    mediaTypes:
    - ^image/avif$
[security]
  [security.http]
    mediaTypes = ['^image/avif$']
{
   "security": {
      "http": {
         "mediaTypes": [
            "^image/avif$"
         ]
      }
   }
}

请注意,Hugo 中的这些和其他配置设置可以被 OS 环境覆盖。例如,如果您想阻止所有远程 HTTP 数据获取

HUGO_SECURITY_HTTP_URLS=none hugo

依赖项安全

Hugo 使用 Go 模块构建为静态二进制文件来管理其依赖项。Go 模块有几个安全措施,其中之一是 go.sum 文件。这是一个包含所有依赖项(包括传递依赖项)的预期加密校验和的数据库。

Hugo 模块是一个构建在 Go 模块功能之上的功能。与 Go 模块一样,使用 Hugo 模块的 Hugo 项目将有一个 go.sum 文件。我们建议您将此文件提交到您的版本控制系统。如果校验和不匹配,Hugo 构建将会失败,这表明存在 依赖项篡改。

Web 应用程序安全

这些是 OWASP 定义的安全威胁。

对于 HTML 输出,这是核心安全模型

https://pkg.go.dev/html/template#hdr-Security_Model

简而言之

模板和配置作者(您)是受信任的,但您发送的数据不受信任。这就是为什么您有时需要使用安全函数(例如 safeHTML)来避免转义您知道是安全的数据。如文档中所述,上述情况有一个例外:如果您启用内联短代码,您还可以说内容文件中的短代码和数据处理是受信任的,因为这些宏被视为纯文本。值得补充的是,Hugo 是一个静态站点生成器,没有动态用户输入的概念。

对于内容,默认的 Markdown 渲染器被配置为删除或转义潜在不安全的内容。如果您信任您的内容,则可以重新配置此行为。

在此页面上

  • 运行时安全
  • 安全策略
  • 依赖项安全
  • Web 应用程序安全
上次更新时间:2024 年 5 月 20 日:在安全页面中添加 security.http.mediaTypes (2f5d1712b)
改进此页面
由 Hugo 作者撰写
Hugo Logo
  • 提交问题
  • 获取帮助
  • @GoHugoIO
  • @spf13
  • @bepsays

Netlify badge

 

Hugo 赞助商

您的公司?
 

Hugo 徽标的版权归 © Steve Francia 2013–2025 所有。

Hugo Gopher 基于 Renée French 的原创作品。

  • 新闻
  • 文档
  • 主题
  • 社区
  • GitHub
  • 关于
  • 安装
  • 入门
  • 快速参考
  • 内容管理
  • 模板
  • 函数
  • 方法
  • 渲染钩子
  • 短代码
  • Hugo 模块
  • Hugo Pipes
  • CLI
  • 故障排除
  • 开发者工具
  • 托管和部署
  • 贡献
  • 维护