如何在SSL上找到该网站是否使用SSL?我正在为实时交易制作一个WP插件,插件检查网站(安装了哪个插件)是否使用SSL非常重要&我必须在结帐页面上显示警告消息,如果网站是不在SSL上。
你可以查看$_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有一个is_ssl()函数来检查自WordPress 2.6以来页面是否正在使用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');
this question中描述了这个问题的许多解决方案。如果你正在使用Apache Httpd并且你可以缩小到某个前缀的路径,你可以在SSLRequireSSL
指令中使用Location
。或者,您可以在PHP中检查$_SERVER['HTTPS']
,如果已定义(可能取决于Web服务器,但通常是这样)。
更重要的是,不要过分关注检查您通过HTTPS提供服务的页面。客户有责任检查,因为,当它到达服务器时,为时已晚:它可能已经被MITM攻击者截获(即使真正的客户端做了,也可能通过HTTPS发出请求)不)。我在this answer上对这个问题做了更长的解释。从UI的角度来看,您应该明确表示用户将进入“安全”部分,并由他们来检查后续请求是否将通过HTTPS。
检查您的服务器是否确实在HTTPS上运行并不一定是件坏事,但从安全角度来看它并没有多大帮助。真正重要的是,该安全部分的所有链接必须使用https://
(并且不得依赖自动URL重写来执行此操作)。