13

Codeigniter で Cookie を HTTPOnly に設定する方法を知りたいです。ドキュメントを確認しましたが、このフラグを設定する方法がわかりませんでした。

また、Cookie のセキュア フラグを設定しようとしていたところ、config.php ファイルで見つかりました。

$config['cookie_secure'] = TRUE;

しかし、config.php には HTTPOnly オプションがありませんでした。

すべての Cookie を HTTPOnly に設定するにはどうすればよいですか? そして、それがフレームワークで行われている場合、そのコードがどこにあるのか (そして、デフォルトが何であるか) を知ることは役に立ちます。

4

4 に答える 4

30

幸いなことに、GitHubでSession.phpのソース コードを表示できます。

関数_set_cookieでは、次のように表示されます。

// Set the cookie
setcookie(
    $this->sess_cookie_name,
    $cookie_data,
    $expire,
    $this->cookie_path,
    $this->cookie_domain,
    $this->cookie_secure,
    $this->cookie_httponly
);

の値$this->cookie_httponlyが割り当てられ、デフォルトは FALSE ですが、次のよう__constructにして TRUE に設定できます。config.php

$config['cookie_httponly'] = TRUE;

これにより、フレームワーク内の Cookie を HTTPOnly にすることができます。

于 2012-05-09T21:03:19.387 に答える
10

私は彼らが codeigniter のセッション管理で drwaback であることを発見しました。

-

  1. 2.1.3 バージョンでは、cookie_httponly フラグはありません。
    解決策:
    ステップ 1: ライブラリに独自の My_session.php を作成し、システム セッション ファイルを拡張するか、Session.php を変更する必要があります (システム->ライブラリ->Session.php ファイル内)
    ステップ 2: _set_cookie($cookie_data = NULL) 関数を見つける、 setcookie() に移動し、次のように変更します

    setcookie( $this->sess_cookie_name, $cookie_data, $expire,
    $this->cookie_path, $this->cookie_domain, $this->cookie_secure, TRUE ); // add True flag.

  2. 「TRUE」を追加し、OWASP ZAP ツールでテストすると、
    CSRF の問題が発生すること があります
    。つまり、HTTPONLY が true ではなく、
    Secure フラグが有効になっていません。

    理由: sess_destroy 中に、HTTPONLY および Secure フラグを none に設定しているためです。
    解決策: Session.php の sess_destroy 関数を次のように更新します。

     // Kill the cookie 
    `setcookie(
              $this->sess_cookie_name,
             addslashes(serialize(array())),
             ($this->now - 31500000),
             $this->cookie_path,
             $this->cookie_domain,
             TRUE,
             TRUE 
         );`
    

これらの問題で眠れぬ夜を過ごしたので、これがあなたにも役立つことを願っています. :)

于 2014-04-27T10:07:08.593 に答える
3

2.1.3 には foreach に cookie_httponly が含まれていないため、設定されません。

foreach (array('sess_encrypt_cookie', 'sess_use_database', 'sess_table_name', 'sess_expiration', 'sess_expire_on_close', 'sess_match_ip', 'sess_match_useragent', 'sess_cookie_name', 'cookie_path', 'cookie_domain', 'cookie_secure', 'sess_time_to_update', 'time_reference', 'cookie_prefix', 'encryption_key') as $key)

また、ここでは設定しません...

    setcookie(
                $this->sess_cookie_name,
                $cookie_data,
                $expire,
                $this->cookie_path,
                $this->cookie_domain,
                $this->cookie_secure
            );
于 2012-11-21T14:31:54.187 に答える
0

この機能は現在 v2 に存在します。この config.php を参照してください。

| | 'cookie_httponly' = Cookie は HTTP(S) 経由でのみアクセス可能 (javascript なし)

$config['cookie_httponly'] = TRUE;

于 2018-10-02T02:18:18.123 に答える