2016-05-16 15 views
2

私はHappstackサーバー用のセッションシステムを作成しています。永続的なストレージにはmongoDBを使用しています。私は、MongoDB ObjectIDがセッションIDとして使用するのが安全かどうか疑問に思っていました。セッションIDの安全なMongoDB ObjectID

答えて

2

一般に、MongoDBのObjectIDはグローバルにユニークであるため、衝突が懸念される場合は安全です。

しかし、あなたがセッションIDについて話しているのであれば、あなたはそれをクライアント側でどのように暗号化しているかによって問題が本当に異なります。通常、これらの質問に対する回答は、クライアントに対して不透明な暗号化されたクッキー値としてはいである必要があります。通常、使用しているWebサーバーには、これを手助けするユーティリティがあります。

また、一意のIDを持っていることを確認しようとしていて、オブジェクトIDをソースとして使用したい場合は、適切です。

+0

ObjectIDの代わりに暗号安全のランダムな値をIDとして使用する方が意味がありません。 IDの暗号化と復号化は常にパフォーマンス上の問題につながると思います。 – NatureShade

+0

実際には、クライアントはセッションIDにアクセスできません(サーバだけがそれを読んでいます)ので、かなり高速な暗号化が必要です。 Railsの動作を確認してください。さらに、セッションストアがMongoDBのようなものに裏打ちされている場合は、ObjectIdを使用することが特に便利です(ここでも、Devise in Railsの例です)。 – TreyE

1

MongoDB ObjectIDはちょうど12バイト[1]ですが、セッションIDはおそらく32バイト[2]長く実装されています。違いは、攻撃者がMongoDB ObjectIDの場合、セッションIDを推測する方が簡単ですが、セッションセキュリティは通常、推測が難しいセッションIDを持つだけではありません。

しかし、セッションIDの長さを16バイト以上にすることをお勧めします[3]。この場合、バニラMongoDB ObjectIDはセッションIDに対して安全ではありません。

[1]。 https://godoc.org/labix.org/v2/mgo/bson#ObjectId [2]。 https://astaxie.gitbooks.io/build-web-application-with-golang/content/en/06.2.html [3]。 https://www.owasp.org/index.php/Session_Management_Cheat_Sheet

関連する問題