Comment savoir si le site est en SSL ou non? Je travaille sur un plugin WP pour des transactions en direct et il est important pour le plugin de vérifier si le site (sur lequel le plugin est installé) utilise SSL ou non. Je dois afficher un message d'avertissement sur la page de paiement si le site n'est pas en SSL.
Réponses
Trop de publicités?Vous pouvez vérifier la variable $_SERVER['HTTPS']
.
fonction 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;
}
}
utilisation:
$domain = 'uniapple.net';
if(is_exist_ssl($domain)){
echo "SSL est activé!";
}else{
echo "Pas de SSL";
}
//utilisation ::
if(!isset($_SERVER['REDIRECT_HTTPS']) || $_SERVER['REDIRECT_HTTPS'] != 'on'){
if(is_exist_ssl($domain)){
header('location : https://'.$domain);
}
}
Étant donné que cette question est ancienne et que les réponses sont un peu dépassées, j'ai pensé apporter ma contribution!
J'ai vu que vous demandiez à propos d'un plugin WordPress. WordPress possède une fonction is_ssl() pour vérifier si une page utilise le SSL depuis WordPress 2.6.
Voici un exemple:
if ( is_ssl() ) {
print_r('Le SSL est activé!');
} else {
print_r('Veuillez installer un certificat SSL!');
}
Si c'est une requête HTTPS, la valeur 'HTTPS' dans le tableau superglobal $_SERVER sera définie et sera définie sur 'on'. Si ce n'est pas une requête HTTPS, elle ne sera pas définie.
Donc pour tester s'il s'agit d'une requête HTTPS en PHP, vous pourriez faire ceci:
if( isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ) {
...
}
Alternativement, vous pourriez le définir en tant que constante si vous avez besoin de savoir s'il s'agit d'une requête HTTPS plusieurs fois dans votre code comme ceci:
define('IS_HTTPS_REQUEST', isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on');
Il existe plusieurs solutions à ce problème décrit dans cette question. Si vous utilisez Apache Httpd et que vous pouvez réduire le chemin à un préfixe spécifique, vous pouvez utiliser SSLRequireSSL
dans une directive Location
. Alternativement, vous pouvez vérifier $_SERVER['HTTPS']
en PHP, si elle est définie (cela peut dépendre du serveur web, mais c'est généralement le cas).
Plus important encore, ne vous concentrez pas trop sur la vérification que la page que vous servez est servie via HTTPS. Il appartient au client de vérifier cela, car une fois qu'il atteint le serveur, il est trop tard : il a peut-être déjà été intercepté par un attaquant MITM (qui pourrait même faire la demande via HTTPS même si le client authentique ne l'a pas fait). J'ai fourni une explication plus détaillée de ce problème dans cette réponse. D'un point de vue UI, vous devriez indiquer clairement à l'utilisateur qu'il va accéder à une section "sécurisée" et qu'il lui revient de vérifier que les requêtes ultérieures se feront via HTTPS.
Il n'est pas nécessairement mauvais de vérifier que votre serveur fonctionne effectivement via HTTPS, mais cela n'aide pas beaucoup d'un point de vue sécurité. Ce qui importe vraiment, c'est que tous les liens vers cette section sécurisée doivent utiliser https://
(et ne doivent pas se fier à une réécriture automatique d'URL pour le faire).