11

Codeigniter で「Remember Me」機能を構築しています。通常、ライブラリ/プロジェクトがトークンを使用してユーザーに Cookie を設定していることがわかります。このトークンはデータベースに保存され、ユーザーが Web サイトにアクセスするたびに比較されます。

Codeigniter では、セッションの有効期限を設定できますが、これにより、別のアプローチを試すようになりました。これが私が行ったことです。

  • config の session_expiration を 0 (無限セッション) に設定しました
  • ユーザーが「Remember me」をオフのままにした場合、セッションに 2 時間の時間を設定し、ウィンドウを閉じるとセッションが破棄されます。

したがって、私のログインコードは次のようになります。

if (!$this->input->post('remember_me')) {
                $this->session->sess_expiration = 7200;
                $this->session->sess_expire_on_close = TRUE;
            }

            $this->session->set_userdata($session_data);

そして私の設定ファイル:

$config['sess_expiration']      = 0;
$config['sess_expire_on_close'] = FALSE;

プロジェクトでこのソリューションを使用している人はいません。これをテストしましたが、うまく機能しているようです。

だから、私の質問に対して、これは安全な方法だと思いますか? 知っておくべきセキュリティ上の危険はありますか? このソリューションと cookie+database トークンに関する意見はどれも素晴らしいでしょう。

4

3 に答える 3

12

この問題に対して私が見つけた最も簡単な解決策は、Codeigniter によって作成された Cookie を次のように変更することです。

        $this->session->set_userdata('user', $user); // a cookie has been created
        if($this->input->post('remember_me'))
        {
            $this->load->helper('cookie');
            $cookie = $this->input->cookie('ci_session'); // we get the cookie
            $this->input->set_cookie('ci_session', $cookie, '35580000'); // and add one year to it's expiration
        }
于 2015-08-02T17:24:26.130 に答える
5

また、これは、システム セッション ライブラリを編集/拡張することによっても実行できます。

最初:構成ファイルで通常のセッションの有効期限を設定します。 2番目:ユーザーログイン機能で、remember meチェックを追加します-

    if($remember)
    {
        $data['new_expiration'] = 60*60*24*30;//30 days
        $this->session->sess_expiration = $data['new_expiration'];
    }
    $this->session->set_userdata($data);

3 番目:システムのセッション ライブラリを編集する [Session の拡張が機能するかどうかわからない]sess_read()メソッドのこの行に移動

if (($session['last_activity'] + $this->sess_expiration) < $this->now)

その行の前に次のコードを追加します

if(isset($session['new_expiration'])){
   $this->sess_expiration = $session['new_expiration'];
}

これは私にとってはうまくいきます。

于 2013-12-18T06:54:45.193 に答える
2

それが正しくないとは言えませんが、これを行う私の方法は次のとおりです。

最初に、デフォルトのアップタイム 7200 でブラウザを閉じるとセッションが期限切れになるように設定しました。

それで:

  1. ログインはセッションのユーザーデータを設定します

  2. 「remember me」は個別の Cookie を設定します (ユーザーの電子メール + パスワード + ID を含む暗号化されたハッシュを保存します。つまり、md5(pass+email+id))

ユーザーがページをロードするたびに、remember me cookie が存在するかどうかを制御し、存在する場合はユーザー セッションを作成します。

私が知っている唯一のことは、セッションは暗号化キーを使用し、悪意のある攻撃者は解読に時間がかかるため、セッションキーが少ないほど、攻撃者が現在のキーを解読するのにかかる時間が短くなります.

私は常にセッションが期限切れにならないようにするので、Remember me は常にセキュリティ上良くないと思いますが、とにかくその機能を使用するかどうかを選択するのはユーザーです ;)

于 2013-01-28T11:23:59.600 に答える