PHP https检查灵活的ssl(cloudflare),该怎么办?

 apologize 发布于 2023-01-16 11:06

背景:网站(example.com),dns通过cloudflare pro计划设置,这提供了"灵活的ssl"(在这里阅读),这意味着ssl只存在于客户端和cloudflare之间,而不是cloudflare和服务器之间,因此不需要专用的ip和不需要在服务器上进行特殊设置.服务器设置为不使用ssl(只是一个通用网站),但是cloudflare灵活的ssl正在处理ssl方面.

语言:PHP(codeignighter,但这并不重要)

目标:浏览域"exmple.com/ "或"http:// exmple.com/ "时,生成变量"http:// example.com",并在浏览"https:// example.com"时/*"生成变量"https:// example.com".

什么应该工作(但不是):

$root = '';
if( isset($_SERVER['HTTPS'] )  && $_SERVER['HTTPS'] != 'off' )
{
    //it doesnt reach here...
    $root .= 'https://';
}
else
{
    $root .= 'http://';
}
$root  .= "".$_SERVER['HTTP_HOST'];
$root .= str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']);

我总是可以做到:"// example.com",但这对我来说并没有真正解决问题.思考?我应该做一些字符串比较来确定https-ness吗?

我确定原因是当请求到达服务器(https或http)时,它来自端口80并且它不会被识别为ssl,因此未定义$ _SERVER ['HTTPS'].我可以在服务器和cloudflare之间设置一个自定义的ssl,但如果我可以使用一些正则表达式并以某种方式比较网址,那么会更好(更省力).

我还想知道可能存在的问题和漏洞.

谢谢 :)

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有