54

codeigniter には、セッション値をデータベースに保存する機能があることがわかりました。
セッションをデータベースに保存することは、優れたセキュリティ対策であると述べています。

しかし、セッション情報をデータベースに保存すると、パフォーマンスが向上すると思います。
次のようなセッションのいくつかの要素のみを保存します。

CREATE TABLE IF NOT EXISTS  'ci_sessions' (
  session_id varchar(40) DEFAULT '0' NOT NULL,
  ip_address varchar(16) DEFAULT '0' NOT NULL,
  user_agent varchar(50) NOT NULL,
  last_activity int(10) unsigned DEFAULT 0 NOT NULL,
  user_data text NOT NULL,
  PRIMARY KEY (session_id)
);

しかし、サイトがユーザー名や最終ログイン時間などのセッション変数をさらに使用している場合は、それらをデータベースに保存してプログラムで使用できます。

これらの列を同じテーブルに追加する必要がありますか? セッション情報をデータベースに保存することは、Web サーバーのメモリ使用量 (RAM) を減らすのに役立つだけだと思います。どのような意味でセキュリティが向上するのか、誰でも説明できますか?

4

6 に答える 6

111

セキュリティが向上するわけではありません。

セッションをデータベースに保存する最も一般的で合理的なパターンは、フロントエンド サーバーが複数ある場合で、それらのサーバー用の共有セッション ストレージが必要です。

反対票を投じる方へ: ファイルシステム内のファイルは、データベース内のレコードほど安全ではありません。

于 2012-12-17T09:16:25.030 に答える
28

アイデアは、セッションをハイジャックできないということです。

セッション ID は Cookie に保存されます。ハッカーがその ID を盗むことができれば、セッションは ID によって識別されるため、他人になりすますことができます。

ユーザーのセッション ID、IP、およびエージェント サーバー側 (データベースなど) を保存することにより、データベースに保存されたデータをクライアントと比較できます。ハッカーが誰かのセッション ID を盗んだ場合、ハッカーは一致する IP やユーザー エージェントを持っていない可能性があり、ユーザーが一致しないため、特定のコンテンツを表示または非表示にすることができます。

ただし、データを手動で比較する必要があります。

于 2012-12-17T09:18:09.273 に答える
9

ファイルベースのセッションでよくあるセキュリティの失敗は/tmp、サードパーティがデータにアクセスできる可能性のある別の共有ディレクトリにセッションを保存することです。特に共有ホストでは、これが問題になる可能性があります。ただし、これは適切なファイル権限で防ぐことができます。

それらをデータベースに保存するということは、データベースのすべてのアクセス制限が整っていることを意味しますが、それはまた、それらを正しく構成し、データベースの物理ストレージを安全にセットアップする必要があることも意味します.

ファイルベースのセッションでは常にディスクアクセスが発生するのに対し、キャッシュとメモリ内ストレージによってパフォーマンスを向上させるためのレイヤーがデータベースサーバーにある限り、パフォーマンスが向上します。ファイル ロック以外の同時実行メカニズムを選択できるため、同時アクセスを改善できます。ただし、データベースサーバーが通常のデータベース作業ですでにビジー状態である場合は、さらにセッション処理をスローすることは良い考えかもしれませんし、そうでないかもしれません.

于 2012-12-17T09:20:24.017 に答える
4

これは答えです: それらをデータベースに保存して、プログラムで利用できますか?

はい、データベースに保存できますが、そのために別の列を作成する必要はありません。ユーザーデータ列に入ります。

でユーザー名を設定できます $this->session->set_userdata('sessionname',session value);

で取得できます $var=$this->session->userdata('sessionname');

于 2012-12-17T09:44:15.130 に答える
3
  • アプリケーションは、サーバー アフィニティ (同じクライアントから同じサーバーに要求を送信する方法) なしで複数のサーバー上で実行できる必要があります。セッションが適切に機能し続けることを確認する簡単な方法は、すべてのサーバーに共通の中央データベースにセッションを保存することです。

  • アプリケーションは共有ホスト上で実行できる必要があります。共有ホストでは、セッション データをファイル システムに保存することに関連する重大なセキュリティ上の懸念があります。

  • アプリケーションのパフォーマンス ニーズは非常に厳しく、セッション データ用のより洗練されたストレージ ソリューションが必要です。データベースのパフォーマンスの問題に対処する既存のアイデアや方法論は多数あり、これらはセッションがデータベースに格納されている場合に使用できます。

参照

クリス、S (2004 年 12 月 14 日)。セッションをデータベースに保存します。クリス・シフレットのブログ。https://shiflett.org/articles/storing-sessions-in-a-database

于 2016-04-11T12:34:06.480 に答える