1

堅牢なフレームワーク/コード (RoR、Zend、Symfony、Django など) で使用されているものについてアドバイスをお願いします。

私は自分のユーザー管理システム (理解: ログイン、ログアウト、ユーザーがログに記録されているか、user_id、ユーザー名など) にシンプルで小さなフレームワーク (userCake) を使用しています。コードをリファクタリングして、iPhone/Androi/Js 用の API を使用しています。このコードを更新したいと思います。クラス、依存関係、クラスを再配置して同じプロセスを維持するだけなのか、それとも何かを変更する必要があるのか​​ を知る必要があります。

現在のプレイ状況
ユーザーがサインインに成功したら、すべてのデータを取得してシリアル化し、sessionID を作成します。このセッション ID をユーザー Cookie に保存し、シリアル化されたすべてのデータを、セッション ID とデータをリンクする DB テーブルに保存します。

次に、私の Web サイトで、ページが要求されるたびに、ユーザーが Cookie/セッションに持っているセッション ID と一致するシリアル化されたデータを DB から取得します。次に、クエリを実行して、ユーザー名とハッシュ化されたパスワードがデータベースで一致し、ユーザーがまだアクティブであること (禁止または削除されていないこと) を確認します。私のAPIでも同じことが行われます(iphone、android、jsはsessionIDを提供する必要があります)。

セッション テーブルから期限切れのものを削除する cronjob があります。ユーザーがログアウトするときも同じです。データベースの行を削除し、ユーザーの Cookie をクリアします。

私が探している
もの 上で説明したことは、私には良さそうです。しかし、それは十分に安全ですか? ユーザー名とパスワードですべて問題がないことを確認するたびに、DB チェックを 2 回行う必要は本当にありますか? セッション テーブルのシリアル化されたデータを信頼することはできませんか?

有名なフレームワーク (Django、Rails、Symfony など) ではどのように行われているのでしょうか?

4

1 に答える 1

1

初め:

ユーザーが正常にサインインした後、私はすべてのデータを取得してシリアル化し、sessionIDを作成します。このsessionIDをユーザーCookieに保存し、シリアル化されたすべてのデータをsessionIDとデータをリンクするDBテーブルに保存します。

あなたが「彼のすべてのデータを取得する」とき、これはすでにデータベースからではありませんでしたか?次に、データをシリアル化してデータベースの別の部分に戻すのはなぜですか?ユーザーIDをセッション変数に格納し、これを使用して必要なユーザー情報を照会しないのはなぜですか?

2番:

次に、クエリを実行して、ユーザー名とハッシュ化されたパスワードがデータベース内で一致することを確認します

DBに対してテストする各リクエストのユーザー名とパスワードはどこで入手できますか?ユーザーをテストしていて、DB内の元の情報に対してシリアル化されたストアをDBに渡すように聞こえます。もしそうなら、あなたがこれを自分で設定するので、これは常に一致します。

第3:

期限切れのセッションを削除するためにcronジョブを使用するのはなぜですか?セッションには、有効期限メカニズムが組み込まれています。

通常、フィンガープリントやトレンド分析を使用してセッションを保護する必要があります。次に、ユーザーのプライマリdbキーをセッション変数に保存し、その各リクエストを使用して、必要なユーザーデータを取得できます。また、セッションIDを作成して自分でCookieに保存する必要はありません。PHPは、session_start()を呼び出すときにこのメカニズムを処理し、保存するセッション変数を$_SESSIONスーパーグローバル配列に格納します。あなたが言及したフレームワークのほとんどはオープンソースであるため、必要に応じて、それらのコードを調べて、それらが何をしているのかを自分で確認することができます。

于 2011-07-03T19:11:09.183 に答える