1

私はconnect-mysql-sessionを使用してセッションをdbに保存しています。今私の質問は、セッションが有効かどうかを確認するためにブラウザエージェントとIPアドレスを含むユーザーデータを追加するにはどうすればよいですか?その情報を取得するにはどうすればよいですか?そして、それが一致するかどうかを確認するにはどうすればよいですか?

    users.login(credentials,function(err, results) {

  //On errors
  if (err) {
    res.render(routes.index, {
      title: 'Login'
    });

  //On success
  } else if (results[0]) {
    //Set session data and redirect to start page
    req.session.userdata = results[0];
    req.session.userdata.email = req.body.email_login;
    req.session.is_logged_in = true;
    res.redirect('/start');

  //Wrong credentials
  } else {
    req.flash('warning','Wrong password or login');
    res.render('index', {
      title: 'Login'
    });
  }
});

アップデート:

これをセッションに追加しました:

req.session.ip = req.connection.remoteAddress;
req.session.useragent = req.headers['user-agent'];

そして私の認証ミドルウェアでそれをチェックしてください:

  if(req.session.userdata && req.session.is_logged_in === true && req.session.ip === req.connection.remoteAddress && req.session.useragent === req.headers['user-agent']) {
    next();
  } else {
    res.redirect('/');
  }

これは安全ですか、それともこれにリスクがありますか?私はそれについて別の方法で行くべきですか?

4

1 に答える 1

1

実装は見栄えがよく、セッションハイジャックに対する基本的な保護を提供します。

しかし、私はあなたのミドルウェアを理解しているかどうかわかりません。/startユーザーが直接リクエストできない理由は何ですか?そして、さらに重要なことに、ミドルウェアはすべての要求をインターセプトするので、/startこれは無限のリダイレクトループのように見えませんか?

私の提案は、IPまたはユーザーエージェントが一致しない場合は常にユーザーがログアウトしていると見なすことです。

于 2012-05-25T15:39:03.280 に答える