2011-02-12 10 views
1

私はRuby on Rails 3を実行しています。ユーザ認証のためにクッキー値を設定するために使用しているコードが十分に強力であるかどうかはわかります。私のモデルでは私のクッキートークンは、それをユーザー認証の目的で使用するには十分強力ですか?

私が持っている:私のコントローラで

require 'digest' 

class User < ActiveRecord::Base 
    ... 

    def make_cookie_id_salt(string) 
    secure_hash("#{self.id}--#{string}") 
    end 

    def secure_hash(string) 
    Digest::SHA2.hexdigest(string) 
    end 
end 

を私は持っている:

cookies.signed[:current_user_id] = { :value => [@user.id, @user.make_cookie_id_salt(@user.id)], :expires => 15.days.from_now } 

が、それは十分に強いですか?ノーならば、私はを例!作る)ことをどのように改善できますか?

答えて

1

すべてはプレーンテキストとして保存されます。

クッキーを設定してブラウザでクッキーを確認すると、cookie名はcurrent_user_idになります。その文字列はG8gcm9sbCB5b3VyIG93biBhdXRoIHRvIGt ...(Not quiteプレーンテキストですよね、実際はBase64でエンコードされていますが、require( 'base64'); Base64.decode64(string))で簡単に読むことができます。

Railsには、Cookieの有効性をチェックするために使用される特殊な_yourapp_session Cookieが格納されます。例えば誰か/誰かがそれを修正しようとしていたら、それは拒絶されるでしょう。

あなたの場合は、クッキーで何かをハッシュしようとしても、それほど問題にはなりません。 これは単に認証に使用されています(IDでデータベース内のユーザーを検索するため)、独自の秘密データを格納していません(クッキーに入れてはいけませんが、何かをハッシュする唯一の理由です) )

もちろん、誰かが(公共のコンピュータを使っていてキャッシュなどをクリアしていない)ユーザーのクッキーを盗んでログインすることもありますが、それを防ぐ手段はありません。ハッシュはそれをobfsucateするために使用された)

あなたが持っているもので結構です。

1

自分で作成するのではなく、Authlogic gemを使用することをおすすめします。構成の数分後に、クッキーなどの完全な認証ソリューションが得られます。あなたが本当にあなた自身をロールしたいなら、Authlogic gemをインストールして、それをどうやって見てみましょう。

+0

ありがとうございますが、あなたはその質問に答えませんでした。 – user502052

+0

@ user502052、彼らはあなたの質問に直接答えていないかもしれませんが、あなた自身でロールアップするよりもうまくテストされた認証ソリューションを使用するほうがよいことを伝えています。あなたが認証の専門知識が不足していて自分のことを書こうとしているのであれば、それが正しいかどうか尋ねなければならない。あなたの選択は、与えられた答えを無視して解決策を実行し、そうしたかどうかを確認し、そうでない場合はハッキングされたサイトに苦しんでいるか、代替ソリューションを見てそれらから学ぶことです。それはあなたの選択です。 –

+0

どこが間違っていますか?私は自分のアプリケーションをほぼすべてのコードを書くことを目指しています(それは正しい方法ですか?)。私は分かりませんが、私は独自のコードを持つこと、他のプラグインや宝石とは独立していて、一貫性があり、よく知っているソフトウェアを持つ方が良いと思います。サードパーティのコードを使用する理由P.S .:アドバイスをいただきありがとうございます。 – user502052

1

Deviseは別のオプションです。それは非常に構成可能で、かなり乾燥しており、疲れはwikiです。私はAuthlogicの上にそれを好む今日間

。クッキーに入れます

+0

ありがとうございますが、あなたはその質問に答えなかった。 – user502052

関連する問題