3

如何找出网站是在 SSL 上还是不在 SSL 上?我正在开发用于实时交易的 WP 插件,插件检查网站(安装插件的网站)是否使用 SSL 很重要,如果网站是,我必须在结帐页面上显示警告消息不在 SSL 上。

4

5 回答 5

3

您可以检查$_SERVER['HTTPS']变量。

于 2012-04-05T11:43:12.080 回答
1
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);
}
}
于 2012-04-05T12:14:06.980 回答
1

由于这个问题很老,而且答案有点过时,我想我会插话!

我看到您在询问有关 WordPress 插件的问题。自 WordPress 2.6 起, WordPress 有一个is_ssl()函数来检查页面是否使用 ssl。

这是一个例子:


if ( is_ssl() ) {
  print_r('SSL is running!');
} else {
  print_r('Please install an ssl certificate!');
}
于 2017-06-14T14:52:38.673 回答
0

如果是 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');
于 2012-04-05T11:51:13.770 回答
0

这个问题中描述了这个问题的许多解决方案。如果您使用的是 Apache Httpd,并且可以缩小特定前缀的路径,则可以SSLRequireSSLLocation指令中使用。或者,您可以检查$_SERVER['HTTPS']PHP,如果它已定义(它可能取决于 Web 服务器,但通常是)。

更重要的是,不要过分关注您所服务的页面是否通过 HTTPS 提供。客户端有责任检查这一点,因为当它到达服务器时,为时已晚:它可能已经被 MITM 攻击者拦截(即使真正的客户端做了,他们甚至可能通过 HTTPS 发出请求不是)。我在这个答案中对这个问题做了更长的解释。从 UI 的角度来看,您应该清楚地表明用户将进入“安全”部分,并且由他们来检查后续请求是否将通过 HTTPS。

检查您的服务器是否确实通过 HTTPS 运行不一定是一件坏事,但从安全角度来看,它并没有多大帮助。真正重要的是必须使用到该安全部分的所有链接https://(并且不能依赖自动 URL 重写来这样做)。

于 2012-04-05T13:24:27.937 回答