2016-05-16 16 views
2

Ich mache ein Session-System für einen Happstack-Server und ich benutze MongoDB für persistenten Speicher. Ich habe mich gefragt, ob die MongoDB ObjectIDs für die Verwendung als Sitzungs-IDs sicher sind.MongoDB ObjectID Safe für Sitzungs-ID

Antwort

2

Im Allgemeinen sind MongoDB ObjectIDs global eindeutig und daher sicher, wenn Kollisionen Ihr Anliegen sind.

Wenn Sie jedoch über eine Sitzungs-ID sprechen, hängt die Frage wirklich davon ab, ob Sie es clientseitig verschlüsseln und wie. In der Regel sollten die Antworten auf diese Fragen ja und als verschlüsselte Cookie-Wert undurchsichtig für den Client sein. Normalerweise wird jeder Webserver, den Sie verwenden, über Hilfsprogramme verfügen.

Wenn Sie nur versuchen, sicherzustellen, dass Sie eine eindeutige ID haben und die Objekt-ID als Quelle verwenden möchten, sind Sie gut.

+0

Wäre es nicht sinnvoller (oder zumindest schneller), einen kryptografisch sicheren Zufallswert als ID anstelle von ObjectIDs zu verwenden? Ich würde denken, dass das Verschlüsseln und Entschlüsseln der IDs die ganze Zeit zu einigen Leistungsproblemen führen könnte? – NatureShade

+0

Da der Client niemals Zugriff auf die Sitzungs-ID hat (nur der Server liest sie), unterliegt er einer recht schnellen Verschlüsselung. Schau dir an, wie Rails es macht. Als eine Randnotiz ist es besonders nützlich, die ObjectId zu verwenden, wenn Ihr Sitzungsspeicher durch etwas wie MongoDB unterstützt wird (wiederum ist Devise in Rails ein Beispiel). – TreyE

1

MongoDB ObjectID ist genau 12 Bytes [1] lang, während Session ID wahrscheinlich als 32 Bytes [2] lang implementiert ist. Der Unterschied besteht darin, dass ein Angreifer Ihre Sitzungs-ID leichter erraten kann, wenn es sich um MongoDB ObjectID handelt, aber Ihre Sitzungssicherheit beruht normalerweise nicht nur auf einer schwer zu erratenden Sitzungs-ID.

Nichtsdestoweniger gibt es eine Empfehlung, Session-ID sollte mindestens 16 Bytes lang schlagen [3]. In diesem Fall ist die Vanilla MongoDB ObjectID nicht sicher für die Sitzungs-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

Verwandte Themen