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

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

我有一台运行 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"

AllowOverride FileInfo已设置,因此用户可以使用文件Header中的指令.htaccess来获得更多控制权(如果需要)。但是,在使用 PHP 和 CGI​​ 时,Apache 似乎不遵守这一点(当文件为 PHP 时,mod_headers 不发送标头),并且即使使用Header always.htaccess Header命令也会被 PHP 文件忽略。

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

Header set X-Frame-Options: "sameorigin" env=!SCRIPT_NAME
Header always setifempty X-Frame-Options: "sameorigin" env=SCRIPT_NAME

没有env测试,我发现第一个命令,即使是setifemptymerge,也会添加一个标题,这样你会X-Frame-Options在标题中看到两个。

那么,这是正确的处理方式吗?如果测试env=SCRIPT_NAME足够,或者是否有更好的测试来确定请求是否由 PHP-FPM/FastCGI 或 Apache 本身处理?

相关内容