如何确定网站是否使用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 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');
这个问题中描述了许多解决方案。如果您使用的是ApacheHttpd,并且可以将路径缩小到某个前缀,则可以在Location
指令中使用SSLRequireSSL
。或者,如果$_SERVER['HTTPS']
已定义,您可以在PHP中检查它(它可能取决于web服务器,但通常是这样)。
更重要的是,不要过于关注检查您所服务的页面是否通过HTTPS提供服务。客户端有责任进行检查,因为当它到达服务器时,已经太晚了:它可能已经被MITM攻击者拦截(即使真正的客户端没有拦截,他甚至可能通过HTTPS发出请求)。我在这个答案中对这个问题作了较长的解释。从UI的角度来看,您应该明确用户将进入一个"安全"部分,并由他们检查后续请求是否通过HTTPS。
检查服务器是否确实在HTTPS上运行并不一定是坏事,但从安全角度来看,这并没有多大帮助。真正重要的是,到该安全部分的所有链接都必须使用https://
(并且不能依赖于自动URL重写)。