auth_tokenを作成するためのmd5またはurlsafe_base64またはその他 -- ruby-on-rails フィールド と security フィールド 関連 問題

md5 or urlsafe_base64 or other for creating an auth_token












3
vote

問題

日本語

私たちはuser_idを使用してセッション変数に書き込むRailsアプリを持っています(クッキーとして行く)。ブラウザやモバイルプラットフォームに同じトークンを使用します。

認証トークンを生成するための好ましい方法は何ですか?私は見ました:

<事前> <コード> token = Digest::MD5.hexdigest('some-value') # this token = SecureRandom.urlsafe_base64 # and this token = SecureRandom.hex # and this

もう一方を使うのは重要な理由はありますか?

THX前もって

英語

I have a rails app that we use user_id and write to a session variable (which goes as a cookie). I will be using the same token for browsers and mobile platforms.

What is the preferred way of generating an auth token? I have seen:

token = Digest::MD5.hexdigest('some-value') # this token = SecureRandom.urlsafe_base64 # and this token = SecureRandom.hex # and this 

Is there a significant reason to use one over the other?

thx in advance

</div
     
 
 

回答リスト

2
 
vote
vote
ベストアンサー
 

レールの文脈の外側(ここでは一般的なWebアプリケーションセキュリティを話しているので)、それは非常に識別が簡単です。

だから、MD5を使用して、2つの方法があります。固定入力、またはランダムなものでもあります。この説明のために、ランダムなコンポーネントを含むすべての入力(ランダム属性を付加したユーザー名のように)はランダムと見なされます。

固定入力方法は良くありません。その理由は、最終的にはある程度予測可能であることです。攻撃者が自分のトークン(それがどのように生成されたかを学ぶ)を予測できるのであれば、彼は他のトークンを攻撃するためにそれを使うことができる。言い換えれば、みんなの悪い日。

ランダム入力方法は、入力の一部がランダムではないことを除いて、純粋なランダムトークンメソッドとは異なりません。

だから私は純粋なランダムトークンで行くことを提案します。 base64またはhexのどちらかが大丈夫ですが、トークンには少なくとも128ビットのランダム性(16文字)があります。良いベースは256ビットのランダム性です。これはBase64では43文字です...

 

Outside of the context of Rails (since we're talking general web application security here), it's pretty easy to discern.

So, using MD5, you have two methods. Either with a fixed input, or a random one. For the sake of this discussion, any input that includes a random component (like the username with a random attribute appended) is considered random.

The fixed input method is not good. The reason is that it's eventually going to be predictable to some extent. If an attacker can predict his/her token (learn how it was generated), (s)he can use that to attack other tokens. In other words, bad day for everyone.

The random input method is really no different from the pure random token method, with the exception that part of the input is not random.

So I would suggest going with a pure random token. Either base64 or hex is fine, but you should have at least 128 bits of randomness in the token (16 characters), and more if you can. A good base is 256 bits of randomness, which in base64 is 43 characters...

</div
 
 

関連する質問

26  IPアドレスフィルタリングのセキュリティはどのくらいですか?  ( How secure is ip address filtering ) 
機密データを持つ内部アプリを展開することを計画しています。私たちはそれを一般的なインターネットにさらされていない機械に入れることをお勧めします。 I.T.部門はこの提案を拒否し、1つのアプリケーションのためのマシン全体を脇に置く価値がないと言った。 (アプリは...

16  OpenIDの主流を作るのに何がかかりますか?  ( What would it take to make openid mainstream ) 
OpenIDは原則として素晴らしいアイデアですが、UIとその理由の説明は現在一般的な使用のために調整されていません - 一般の人々のためにOpenIDの仕事をするのにかかると思いますか?これは技術で解決できますか、それとも本質的に非常に本質的に懸命に困難であ...

125  PHPセッションセキュリティ  ( Php session security ) 
ロック。この質問とその答えは <ですが、質問はトピックですが歴史的に重要です。現在新しい回答ややり取りを受け付けていません。 PH...

1  どのように私はIISのすべてのコンテンツを再帰的に閲覧できますか?  ( How can i recursively browse all content of iis ) 
仮想ディレクトリとそのサブディレクトリとファイル(再帰的に)を閲覧するには、次のプログラムがあります。 <事前> <コード> static void Main(string[] args) { string server...

51  どのように私はZip Bombから自分自身を守ることができますか?  ( How can i protect myself from a zip bomb ) 
私はちょうど ZIP Bombs 、すなわち非常に大量の非常に圧縮性を含むZipファイルを読みました。データ(00000000000000000 ...) 開くと、サーバーのディスクを埋めます。 ZIPファイルを検出する方法前にの前にそれを解凍することができ...

5441  フォームベースのWebサイト認証の決定的なガイド[閉じる]  ( The definitive guide to form based website authentication ) 
閉鎖。この質問はもっと焦点を絞ったにする必要があります。現在答えを受け付けていません。 この質問を改善したいですか?この記事の編...

18  LinuxでApacheをサンドボックスにするための最良の方法  ( Best way to sandbox apache on linux ) 
私は公共のDebianサーバー上でApacheを実行しており、インストールのセキュリティについて少し心配しています。これはいくつかの自由タイムのホビープロジェクトをホストするマシンであるため、マシンを使用する私たちのどれも上流のパッチを常時視聴する時間があり、...

9  XSSセキュリティ同じドメインから2のIFRAMES間の通信  ( Xss security communication between 2 iframes from the same domain ) 
Domain ABC.comには2つのiframesを持つページがあります。どちらもdomain xyz.comからロードされています。 XSSセキュリティブロックJavaScriptのアクセス/通信/コミュニケーション/コミュニケーション/インタラクション...

5  is_numericまたは数値PREG_MATCH?  ( Is numeric or a numeric preg match ) 
is_numeric()を完全に信頼できないフォーラムで読み込んでください。はたとえば "0xff"を通して許容される16進数... だから私の質問はあなたがトリック is_numeric をトリックすることができますか?正規表現を正しくする必要がありま...

4  複数の暗号アルゴリズムの組み合わせ  ( Combination of more than one crypto algorithm ) 
次のことを検討しています。私はできるだけ安全に保護したいデータストリームを持っています - それは、いくつかのIVを持つAES、その後何らかのIVで、そしてやっと再びフェムスをしましょう。いくつかのiv? 暗号化/復号化プロセスは隠されます(デバッグに対して保...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有