2016-04-22 3 views
1

Hartlのチュートリアルでは、セッションをuser_idのハッシュバージョンとして保存されたクッキーとして設定しました。私たちは、その後、user.iduser_Idセッションセキュア? Hartl

https://www.railstutorial.org/book/log_in_log_out

def log_in(user) 
    session[:user_id] = user.id 
    end 

これは安全であるにハッシュ解除済みクッキーを比較しますか?私は別のランダムなユーザーとしてログインするために使用できるCookieを自分で生成するために、ランダムなuser_id番号をハッシュしてセッションできませんでしたか?

+0

ハートルの本はチュートリアルのためのものであり、あなたが望むものをカスタマイズすることができます。 –

+0

それは安全ではないと私の説明なぜ正しいのですか? – user3456978

答えて

2

クッキーストアによって保存されるデータは、暗号署名されています(ユーザはすべてのデータを見ることができますが、変更は検出され、拒否されます)セッション中に保存しているもの)。どちらの場合も、セッションデータを改ざんすると、レールがセッションをロードしようとすると例外が発生します。

通常のCookieに対しては、コントローラー内でcookies.signedまたはcookies.encryptedを使用して、これらの保護を使用できます。

暗号化/署名に使用される鍵は、secret_key_base設定から得られます(最近のバージョンのレールでは、これはconfig/secrets.ymlにあります)。攻撃者がこの設定にアクセスした場合、Cookieストアセッションデータを偽造する可能性があります。

+0

したがって、secret_key_baseは、レールアプリケーションごとに一意です。私は2つの異なるレールアプリを作成する場合、私は2つの異なるsecret_key_base暗号化 "コード"を期待することができます。さらに、この例では、私を除いて私がユーザー:idをハッシュしていることを誰も知らない。データベースを侵害しても、secret_key_baseやセッションを利用するための私の技を悪意のあるユーザーに知らせることはできません。ただし、データベースが侵害され、ハッシュされたセッション列がない場合、セッションハッシング技法を推測できる可能性があります。それが答えの正しい解釈だと思いますか? – user3456978

+0

それは本当にユニークです。セッション秘密の使い方を心配することはありません。それはあまり価値がない、あいまいさによるセキュリティだけです。データベースはこれほどまでにはあまり入っていません。 –

0

通常、user.idを公開したくありません。セッションの仕組みは、session [:user_id]が一時的なクッキーを作成し、user.idを自動的に暗号化するというものです。これはセッション[:user_id]とCookie [:user_id]の違いの1つです。次に、次のページで自動的に解読されます。技術的にはまだ安全だと考えられています。

+0

私は数字をハッシュしているという意味では安全ですが、ベース番号はランダムではなく、簡単に推測できるので安全でないとは思わないでしょうか?私たちは知っている:user_idは1から始まり、インクリメントする。 – user3456978

関連する問題