在使用 Apache + PHP-FPM 时,如何允许用户覆盖 X-Frame-Options?

mur*_*uru 5 fastcgi .htaccess http-headers php-fpm apache-2.4

我有一台运行 Apache + PHP-FPM + FastCGI 的 Ubuntu 14.04 服务器,为用户主页提供服务。为了安全起见,我在 Apache 的配置中启用了:

Header set X-Content-Type-Options: "nosniff"
Header set X-Frame-Options: "sameorigin"
Header set X-XSS-Protection: "1; mode=block"
Run Code Online (Sandbox Code Playgroud)

AllowOverride FileInfo已设置,因此用户可以Header.htaccess需要时使用文件中的指令进行更多控制。但是,Apache 似乎不尊重在 CGI 中使用 PHP 时(当文件为 PHP 时 mod_headers 不发送标头),并且即使使用Header always.htaccess HeaderPHP 文件的命令也会被忽略。

我的下一个想法是让用户修改他们的 PHP 代码以使用PHPheader函数,以便他们可以将其设置为 X,并且setifempty只有在用户没有时我才能使用它。经过一些试验,我发现这些条目有效:

Header set X-Frame-Options: "sameorigin" env=!SCRIPT_NAME
Header always setifempty X-Frame-Options: "sameorigin" env=SCRIPT_NAME
Run Code Online (Sandbox Code Playgroud)

在没有env测试的情况下,我发现第一个命令,即使是setifempty, or merge,也会添加一个标题,因此您会X-Frame-Options在标题中看到两个。

现在,这是解决这个问题的正确方法吗?如果env=SCRIPT_NAME测试足够,或者是否有更好的测试来确定请求将由 PHP-FPM/FastCGI 还是 Apache 本身处理?