0

私は、プロジェクト (expressjs) でセッションを管理するために Cookie を使用しない方法で作業しており、すべてのセッション データをサーバー側で保持し、クライアント側で (以前はサーバーによって生成された) トークンを使用して、すべての要求でセッションを検証しています。

ユーザーのログイン時に新しいトークンが作成され、ページのどこかに隠され、リクエストごとにこのトークンがリクエスト ヘッダーに書き込まれ、サーバー側で検証されます。この時点で、サーバーはセッション ストアでトークンを検索し、たとえば redis を使用して、トークンが見つかった場合はセッション データを取得するか、それ以外の場合はセッションが期限切れになったことを示すメッセージで応答します。

このために私が考えていることがいくつかあります:

  • Redis キーは、有効期限が設定されたユーザー ログイン時に作成されます。
  • セッション データが redis で見つかるたびに、有効期限が延期されるようにキーを「タッチ」する必要があります。
  • トークンはクライアントの IP アドレスとともに検証されるため、他の人が使用することはできません。

私の質問は、これが を使用するための安全な方法と見なすことができるかどうか、そしてここに欠けているものがあるかどうかです。ありがとう

4

1 に答える 1

0

OK、セッションを保存するには Cookie が必要です。Express はそれを理想的な方法で行います。

高速セッション( Cookiesessionではない) では、サーバーに完全に保存され、キーのみがクライアントに送信されます。セッション全体がキーにシリアル化されてから送信されます。ユーザーがセッション Cookie を改ざんできないようにする必要があると思います。改ざんを防ぐために httponly Cookie を使用できます。それらはブラウザによってのみ処理され、ユーザーはアクセスできません。これにより、Cookie の盗難やセッション ハイジャックが防止されます。次の方法で httponly Cookie を有効にできます。

 app.use(express.session({cookie: { path: '/', httpOnly: true}, secret:'password'}));

それでも、Cookie の盗聴を防ぐために何らかの暗号化を使用する必要があります。そのために使用secure : trueします。redis、mongo、または単にメモリ内でセ​​ッションを保存する場所を指定することもできます。

あなたが言及しているリクエストトークンの検証は、クロスサイトリクエストフォージェリを防ぐために一般的に使用される手法です。ユーザーがトークンを取得できないように、トークンを動的に変更し続けます。これは、 csrfミドルウェアを使用してエクスプレスで使用できます。

app.use(express.csrf())

ユーザーの IP は時間の経過とともに変化する可能性があるため、IP マッチングは機能しません。

于 2013-10-17T18:39:37.727 に答える