本PR基于@耐小心 的PR进行了扩展,在此感谢原PR提供者的工作,地址为 https://gitee.com/ComsenzDiscuz/DiscuzX/pulls/191

考虑到部分站点可能采用半程HTTPS方式实现HTTPS改造(用户到中转节点为HTTPS,中转节点卸载HTTPS,通过HTTTP方式回传到业务服务器),例如启用类似Cloudflare的Flexible SSL模式,或者采用Nginx、Squid等反向代理软件代理站点,导致站点HTTPS访问出现页面异常(CSP拦截CSS/JS加载)的问题发生。

本PR添加了更灵活的HTTPS判断方式,除支持标准的SERVER["HTTPS"]之外,还支持了SERVER["HTTP_X_FORWARDED_PROTO"]、SERVER["HTTP_SCHEME"]、SERVER["HTTP_FROM_HTTPS"]等常见的网页请求方式透传头部,以及基于SERVER["SERVER_PORT"] == 443的灵活判断方式,方便部分配置不合规的Nginx + PHP-FPM用户顺利使用。

同时考虑到部分HTTPS站点本身具有大量存量HTTP连接,因此导致HTTPS无法显示绿锁,本PR增加了支持返回在HTTPS环境下请求浏览器升级HTTP内链到HTTPS的CSP策略,帮助用户解决因存量资源为HTTP链接导致绿锁消失的问题。

安全性提示:考虑到安全性问题,除非服务器与CDN/代理服务器之间采用使用加密技术建立的虚拟专用网或安全的内部网络连接,否则不建议采取用户到CDN/代理服务器采取HTTPS方式,而CDN/代理服务器到站点采用HTTP方式(Cloudflare的Flexible SSL模式)进行回程,尤其是采取HTTP协议进行公网回程。此种回程方式具有一定的安全隐患,由于公网环境的不确定性,HTTP方式传输的数据包可能在CDN/代理服务器与站点之间被篡改或窃听,轻者插入广告内容,重者可能会插入病毒木马代码或窃取站点数据。

兼容性提示:['output']['upgradeinsecure']选项与部分自定义CSP策略不兼容,如果您的站点计划配置不兼容的CSP策略,建议您关闭此选项后手动配置CSP策略。

关联论坛:
https://www.discuz.net/thread-3848521-1-1.html
https://www.discuz.net/thread-3849681-1-1.html
https://www.discuz.net/thread-3849792-1-1.html

关联Issue:
https://gitee.com/ComsenzDiscuz/DiscuzX/issues/IP070
https://gitee.com/ComsenzDiscuz/DiscuzX/issues/I1CZGJ