【问题标题】:Apache - Error with Permissions-Policy header: Parse of permission policy failed because of errors reported by strctured header parserApache - Permissions-Policy 标头错误:由于结构标头解析器报告的错误,权限策略解析失败
【发布时间】:2021-05-26 18:23:26
【问题描述】:

我最近尝试更新我托管的非营利网站的服务器上的设置,但遇到了与权限策略有关的配置问题。我没有找到很多用于此设置的正确用例和语法示例,因此在 cimarronoutdoors.org 的 Chrome 控制台中遇到了错误。这是我正在尝试的权限策略。

Header always set Permissions-Policy "geolocation=();midi=();microphone=();camera=();fullscreen=(self);payment=()"

在控制台中它返回以下内容。

Permissions-Policy 标头出错:由于结构标头解析器报告错误,权限策略解析失败。

我已尝试仅列出下面链接中的项目并将其限制为几个,以查看这是否可能是问题,但我无法让错误消失。

https://github.com/w3c/webappsec-permissions-policy/blob/main/features.md

对于这个问题的任何建议将不胜感激。

  • 服务器操作系统:Ubuntu 16.04.7 LTS
  • 站点配置文件中设置的权限策略。

【问题讨论】:

    标签: apache permissions header policy


    【解决方案1】:

    我发现方案从microphone 'none'; geolocation *; payment https://*.paypal.com;变成了microphone=(),geolocation=*,payment=("https://*.paypal.com")

    目前下面的代码是有效的,所以它不会产生也不会产生“我们没有检测到可行的政策”。在securityheaders.com 上,“Permissions-Policy 标头错误:由于结构化标头解析器报告的错误,权限策略解析失败。”在 Google Chrome 控制台中。

    请记住在配置中正确转义双引号,使用逗号而不是分号(如上所述)并使用“新格式”。

    nginx.conf 示例:

    add_header Permissions-Policy "accelerometer=(),autoplay=(),camera=(),encrypted-media=(),fullscreen=*,geolocation=*,gyroscope=(),magnetometer=(),microphone=(),midi=(),payment=(\"https://*.paypal.com\" \"https://*.barion.com\"),sync-xhr=*,usb=(),xr-spatial-tracking=()" always;
    

    apache.conf 示例:

    Header always set Permissions-Policy "accelerometer=(),autoplay=(),camera=(),encrypted-media=(),fullscreen=*,geolocation=*,gyroscope=(),magnetometer=(),microphone=(),midi=(),payment=(\"https://*.paypal.com\" \"https://*.barion.com\"),sync-xhr=*,usb=(),xr-spatial-tracking=()"
    

    【讨论】:

      【解决方案2】:

      创建 Permission-Policy 的方式已经改变。

      您必须在列表周围添加括号,使用逗号而不是分号,并在大多数字符串周围添加双引号:

      fullscreen=(self 'https://example.com'), geolocation=*, camera=()
      

      这是一个链接:Appendix: Big changes since this was called Feature Policy

      【讨论】:

      • 我看到了该文档,但它似乎没有为 apache 正确格式化,这就是我感到困惑的原因。
      【解决方案3】:

      使用逗号代替分号作为分隔符。

      参见此处的示例:

      https://www.w3.org/TR/permissions-policy-1/#policy-directive

      【讨论】:

      • 这是正确的——Permissions-Policy 标头是一个结构化字典,逗号用于分隔字典项。 (分号将参数分隔,但策略声明中没有任何参数)
      猜你喜欢
      • 2012-05-30
      • 2015-10-12
      • 2019-11-23
      • 2021-04-29
      • 2020-02-18
      • 2018-09-30
      • 2021-11-06
      • 1970-01-01
      • 2016-05-28
      相关资源
      最近更新 更多