为什么我的 apache 拒绝“Content-Security-Policy”标头?

Rie*_*emu 3 ubuntu http-headers apache-2.2 apache-2.4

我目前正在实施内容安全策略。但我的 apache 拒绝接受配置设置。

我目前使用的apache2版本是:2.2.22和2.4.7。这些 apache2 版本似乎都不起作用。

我的配置设置是:

Header always set Content-Security-Policy: frame-src 'self' *.google.de google.de *.google.com google.com;
Header always set Content-Security-Policy-Report-Only: default-src 'none'; script-src 'self'; connect-src 'self'; img-src 'self'; style-src 'self'; report-uri https://www.myhostname.com/report/report.php;
Header always set X-Content-Security-Policy: frame-src 'self' google.de google.com;
Run Code Online (Sandbox Code Playgroud)

我在其中任一设置上收到以下错误消息。如果我注释掉一行,错误就会更改为以下行:

Output of config test was:
AH00526: Syntax error on line 7 of /etc/apache2/conf-enabled/security.conf:
Header has too many arguments
Action 'configtest' failed.
Run Code Online (Sandbox Code Playgroud)

我尝试了所有可能的设置组合,但出现了相同的错误消息。所以我开始相信,我的 apache 不支持这些标头?但我在网上没有找到任何关于这个问题的信息。

或者我只是错过了一些重要的东西?我还从其他页面复制了各种示例,它们产生了相同的错误。

标头总体工作正常。我还设置了几个其他标题,它们工作得很好:

Header always set X-Content-Type-Options nosniff
Header always set X-XSS-Protection "1; mode=block"
Header always set X-Permitted-Cross-Domain-Policies "master-only"
Header always set Cache-Control "no-cache, no-store, must-revalidate"
Header always set Pragma "no-cache"
Header always set Expires "-1"
Run Code Online (Sandbox Code Playgroud)

感谢您!

Mic*_*ton 6

如果标头的值包含空格,则必须用双引号将其引起来。您的示例已经做到了这一点,但您想要的新标题却没有。

例如,您尝试过:

Header always set Content-Security-Policy: frame-src 'self' *.google.de google.de *.google.com google.com;
Run Code Online (Sandbox Code Playgroud)

它应该是:

Header always set Content-Security-Policy: "frame-src 'self' *.google.de google.de *.google.com google.com;"
Run Code Online (Sandbox Code Playgroud)

或者你可以这样做:

Header always set Content-Security-Policy: "\
  frame-src 'self' \
     *.google.de   \
       google.de   \
     *.google.com  \
       google.com  \
;"
Run Code Online (Sandbox Code Playgroud)