CakePHP2.x https対応(全画面でhttpをhttpsにリダイレクトする)

CakePHP2.x https対応(全画面でhttpをhttpsにリダイレクトする)

CakePHP2.x https対応(全画面でhttpをhttpsにリダイレクトする)をしました。

環境 CakePHP2.10.2 PHP7.1

経緯としては、wifiの脆弱性もあるしユーザ登録・ログインなどがあるサービスの為です。暗号化させて保護された通信をさせないとユーザも安心出来ないですし。

httpからhttpsにリダイレクトするには、通常webサーバ・apacheの設定や.htaccessで良いと思います。ただ、今回はレンタルサーバに乗せているサービスで、かつWordPressのように.htaccessで制御するようにはしておらず(普通はCakePHPでサービス構築する時は.htaccessを使用しないようにすると思います)、アプリ側で制御する必要があったのでCakePHP側で、httpからhttpsへのリダイレクト設定をしました。

対応内容

全ページhttpのアクセスをhttpsへリダイレクトする。

修正ファイル

AppController.php

class AppController extends Controller {
  public $components = array(
    'Security',
    )
  );

  public function beforeFilter() {
    // デバッグ時以外はhttp->httpsにリダイレクト
    if (!Configure::read('debug')) {
     $this->Security->blackHoleCallback = 'forceSecure';
     $this->Security->requireSecure();
    }
  }

  public function forceSecure() {
      $this->redirect("https://" . env('SERVER_NAME') . $this->here);
  }
}

補足

ローカル・デバッグ環境ではhttps化していない為、デバッグ時を除くようにしました。

参考サイト様を参考にAppController.phpに組み込みました。(↑には今回の対応コードしか書いてませんが、色々カスタマイズしているので抜粋しています。)

 

これで本番https環境へデプロイしたらうまくいったもののChromeのデベロッパーツールで赤くなっている箇所が。

外部リンクを張っている箇所がhttpになっていた為の警告でした。プロトコルを

http://

から

https://

に変えてあげるのも良いのですが、上にも書いたようにローカルだとhttp環境の為、どちらでも合わせられるように

//

にしました。これでhttps環境だったら勝手にhttps://になりますし、httpだったらhttp://になります。

 

参考サイト様

http://www.tailtension.com/cakephp/651/

Comments

No comments yet. Why don’t you start the discussion?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です