如何找出网站是在 SSL 上还是不在 SSL 上?我正在开发用于实时交易的 WP 插件,插件检查网站(安装插件的网站)是否使用 SSL 很重要,如果网站是,我必须在结帐页面上显示警告消息不在 SSL 上。
5 回答
您可以检查$_SERVER['HTTPS']
变量。
function is_exist_ssl($domain){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://".$domain);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_exec($ch);
if(!curl_error($ch)){
$info = curl_getinfo($ch);
if($info['http_code'] == 200){
return true;
}
return false;
}else{
return false;
}
}
用法:
$domain = 'uniapple.net';
if(is_exist_ssl($domain)){
echo "SSL is enabled!";
}else{
echo "No SSL";
}
//usage ::
if(!isset($_SERVER['REDIRECT_HTTPS']) || $_SERVER['REDIRECT_HTTPS'] != 'on'){
if(is_exist_ssl($domain)){
header('location : https://'.$domain);
}
}
由于这个问题很老,而且答案有点过时,我想我会插话!
我看到您在询问有关 WordPress 插件的问题。自 WordPress 2.6 起, WordPress 有一个is_ssl()函数来检查页面是否使用 ssl。
这是一个例子:
if ( is_ssl() ) {
print_r('SSL is running!');
} else {
print_r('Please install an ssl certificate!');
}
如果是 HTTPS 请求,超全局 $_SERVER 数组中的 'HTTPS' 值将被设置并设置为 'on'。如果不是 HTTPS 请求,则不会设置。
因此,要测试它是否是 PHP 中的 HTTPS 请求,您可以这样做:
if( isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ) {
...
}
或者,如果您需要在代码中多次知道它是否是 HTTPS 请求,您可以将其设置为常量,如下所示:
define('IS_HTTPS_REQUEST', isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on');
这个问题中描述了这个问题的许多解决方案。如果您使用的是 Apache Httpd,并且可以缩小特定前缀的路径,则可以SSLRequireSSL
在Location
指令中使用。或者,您可以检查$_SERVER['HTTPS']
PHP,如果它已定义(它可能取决于 Web 服务器,但通常是)。
更重要的是,不要过分关注您所服务的页面是否通过 HTTPS 提供。客户端有责任检查这一点,因为当它到达服务器时,为时已晚:它可能已经被 MITM 攻击者拦截(即使真正的客户端做了,他们甚至可能通过 HTTPS 发出请求不是)。我在这个答案中对这个问题做了更长的解释。从 UI 的角度来看,您应该清楚地表明用户将进入“安全”部分,并且由他们来检查后续请求是否将通过 HTTPS。
检查您的服务器是否确实通过 HTTPS 运行不一定是一件坏事,但从安全角度来看,它并没有多大帮助。真正重要的是必须使用到该安全部分的所有链接https://
(并且不能依赖自动 URL 重写来这样做)。