![当使用 Apache + PHP-FPM 时,如何允许用户覆盖 X-Frame-Options?](https://linux22.com/image/680096/%E5%BD%93%E4%BD%BF%E7%94%A8%20Apache%20%2B%20PHP-FPM%20%E6%97%B6%EF%BC%8C%E5%A6%82%E4%BD%95%E5%85%81%E8%AE%B8%E7%94%A8%E6%88%B7%E8%A6%86%E7%9B%96%20X-Frame-Options%EF%BC%9F.png)
我有一台运行 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
测试,我发现第一个命令,即使是setifempty
或merge
,也会添加一个标题,这样你会X-Frame-Options
在标题中看到两个。
那么,这是正确的处理方式吗?如果测试env=SCRIPT_NAME
足够,或者是否有更好的测试来确定请求是否由 PHP-FPM/FastCGI 或 Apache 本身处理?