SSL通信かどうか

SSL暗号化通信でのアクセスかどうかを判断するのに、アクセスされたサーバポートの番号で判断してはいけません。

例えばこんな感じ。

if($_SERVER["SERVER_PORT"] == 443){
  echo "SSL通信です。";
}else{
  echo "SSL通信ではありません。";
}

非SSLでのアクセスでもポートを指定してアクセスできるからです。
http://www.example.com:443/

apache_getenv("HTTPS")
または
$_SERVER['HTTPS']
を用いるべきです。

SSL通信であれば、この値はともに『on』が返ります。

非SSL通信の場合、apache_getenv("HTTPS")はブランク、$_SERVER['HTTPS']はセットされません。

apache_getenv("HTTPS")の場合

if(apache_getenv("HTTPS")){
  echo "SSL通信です。";
}else{
  echo "SSL通信ではありません。";
}

$_SERVER['HTTPS']の場合

if(isset($_SERVER['HTTPS'])){
  echo "SSL通信です。";
}else{
  echo "SSL通信ではありません。";
}

このようにします。

ただSSLアクセラレータを使用している場合など、 インフラ環境によってwebサーバの中間にサーバがあるときにはこの判断はできないことがあるので注意してください。

関連記事

スポンサーリンク

bottom 下からの配置位置(距離)を指定する

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る