2009-02-26 6 views
0

Ich habe eine ASP.NET-Anwendung, die Session.SessionID verwendet, um zu verhindern, dass mehrere Benutzer die gleichen Daten zur gleichen Zeit anzeigen.Kann die ASP.NET-Sitzungs-ID auf zwei Computern gleichzeitig identisch sein?

Ich habe eine Tabelle, die eine Reihe von Bildern (gespeichert in BLOB) enthält, die Verarbeitung erfordern. Nur ein Benutzer soll dasselbe Bild gleichzeitig anzeigen können. Um dies zu erreichen, wird, während jeder Datensatz von einem Benutzer abgerufen wird, der Datensatz mit der Session.SessionID aktualisiert. Diese Aktualisierung erfolgt in einem ReaderWriterLock.

Ich habe einen Test gemacht, um sicherzustellen, dass der ReaderWriterLock richtig funktioniert und kann bestätigen, dass nur eine Sitzung den Code innerhalb dieses Blocks gleichzeitig ausführen kann.

Meine aktuelle Theorie ist, dass zwei verschiedene Benutzer die gleiche SessionID zur gleichen Zeit erhalten. Ein Benutzer dieser Anwendung darf gesperrte Datensätze oder nicht gesperrte Bilder anzeigen.

Ich habe die Anwendung geändert, um die SessionID in der Fußzeile jeder Seite anzuzeigen, so dass, wenn das Problem erneut auftritt, ich den SessionID-Wert überprüfen kann.

Ich habe einige Artikel online gesehen, die darauf hindeuten, dass SessionID nicht eindeutig ist und einige sagen, dass die SessionID einzigartig ist. Ich verstehe, dass SessionID nicht für immer eindeutig ist, aber kann der SessionID-Wert für aktive Sitzungen als einmalig angesehen werden?

This forum describes a similar problem

Ich habe auch einige Vorschläge lesen, die ein Guid sollte im Session-Objekt und als eine eindeutige Kennung anstelle der Session-ID gespeichert werden.

Vielen Dank für die Antworten bisher. Hier ist eine Klärung basierend auf den bisherigen Antworten:

"Für immer gesperrt" - wir verhindern dies durch eine Sperrzeit von 5 Minuten. Bevor ein Benutzer ein Bild sperrt, während wir im ReaderWriterLock sind, machen wir eine "Bereinigung" von alten Sperren (die Bilder entsperrt für mehr als 5 Minuten entsperrt), eine Abfrage, um das älteste entsperrte Bild und eine Update-Anweisung zu "sperren" Bild zur aktuellen Sitzung.

Eine mögliche Ursache des Problems wäre, wenn ein Benutzer ein Bild "sperrt", dann aber den PC für eine kurze Pause verlässt. Wenn sie 5 Minuten lang nichts tun, wird das Bild auf dem Bildschirm entsperrt und möglicherweise von einem anderen Benutzer geöffnet. Ich erwähnte dieses Szenario, als das Problem gemeldet wurde und mir wurde versichert, dass die Benutzer kontinuierlich gearbeitet haben.

"Anderes Fenster/Tab" - Ich habe den Fehler eigentlich nicht mit meinen eigenen Augen gesehen, aber die Person, die das Problem gemeldet hat, hat mir gesagt, dass es zwei verschiedene PCs und zwei verschiedene Benutzernamen des angemeldeten Benutzers sind.

Hoffentlich nun, dass ich die Session ID auf der Seite anzeigen, beim nächsten Mal werde ich in der Lage sein, mit Sicherheit zu sagen, ob es die gleiche Session ID auf zwei Maschinen ist oder wenn es ein anderes Problem ist. Dieses Problem trat während der Testphase nie auf, daher scheint es ein Symptom für eine größere Anzahl gleichzeitiger Benutzer zu sein.

Vielen Dank für die Antworten bis jetzt und ich werde diese Frage aktualisieren, wie weitere Informationen zur Hand kommen.

Es scheint, dass der Benutzer mir die ganze Geschichte nicht gab. Die Sitzungs-ID ist in unserem Fall gemäß der akzeptierten Antwort eindeutig. Zwei Benutzer konnten dasselbe Bild zur selben Zeit sehen, da Benutzer 1 für den 5-minütigen Entsperrprozess "verlassenes Bild" inaktiv war. Das Timeout "verlassenes Bild" wurde erhöht, um dem Sitzungszeitlimit zu entsprechen, um dieses Problem zu vermeiden.

Antwort

0

Dieser Link sagt Session-IDs sind einzigartig - http://support.microsoft.com/kb/899918

Session-IDs eindeutig sind, dass nur 1 Sitzung wird jemals diese ID haben zu einem bestimmten Zeitpunkt.

Wenn dies nicht der Fall wäre, denke ich, dass viele Leute sehr laut darüber schreien würden.

1

Die Sitzungs-ID ist fast sicher einzigartig für den Benutzer. Fehlermodi, bei denen mehrere Benutzer eine SessionID teilen, sind heute sehr, sehr selten. Ein Benutzer kann jedoch mehrere Dinge tun, um den Effekt zu erzeugen, den Sie sehen.

Zum Beispiel kann der Benutzer mehrere Registerkarten in ihrem Browser geöffnet haben. Diese Registerkarten teilen sich alle dieselbe Sitzungs-ID. Wenn sie zwischen diesen Browser-Tabs hin- und herwechselt, kann dies den Effekt ergeben, den Sie sehen.

Ein weiteres Problem ist, dass Benutzer häufig Schaltflächen und Links doppelklicken. Dies bedeutet, dass eine Verarbeitungsanforderung zweimal mit derselben Sitzungs-ID ausgegeben werden kann. Ich würde zuerst nach dieser Möglichkeit suchen.

3

Die Sitzungs-ID ist für jeden Benutzer eindeutig, sofern ASP.NET sie zuweist. Dies ist jedoch keine Garantie gegen böswillige Benutzer (ein Benutzer könnte die ihm zugewiesene ID manuell kopieren und an eine andere Person weitergeben).

Was Sie wahrscheinlich hier sehen, ist mehrere Registerkarten oder Fenster von demselben Benutzer, da es perfekt für einen Benutzer gültig ist, der mehr als eine Anfrage gleichzeitig macht.

Um zu tun, was Sie wollen, würde ich fragen müssen - woher wissen Sie, wenn ein Benutzer gestoppt hat Blick auf ein Bild, so dass Sie es entsperren können. Was passiert, wenn ich ein Bild anschaue und dann einfach meinen Browser schließe, anstatt zu einer anderen Seite/einem anderen Bild zu gehen? Bleibt es für meine (verlorene) Sitzungs-ID gesperrt?

Wenn Sie irgendeine Art von Checkout-Schema verwenden - der Benutzer muss absichtlich ein Bild auschecken und einchecken, dann sollten Sie vielleicht eine eindeutige Nummer für diesen Checkout (neue Guid) verwenden, anstatt den ganzen Benutzer.

+0

YESSS finden !! Mehrere Tabs/Fenster desselben Benutzers –

2

Rote Fahne hier Leute.

Ja, Sie können, aber es ist absolut notwendig, dass Sie es nicht oder zumindest so schwer wie möglich machen, sie in Zukunft wieder zu verwenden.

Dies hängt davon ab, wie gut Ihre serverseitige Anwendung Sitzungs-IDs verarbeitet und Status verwaltet. Sie sollten (tatsächlich müssen) darüber nachdenken, die Lebensdauer der Session_ID zu begrenzen, wie Sie nach dem Authentifizierungs-/Autorisierungsstatus suchen.

Ich sah in einer kritischen Handelsplattform bei einer Top-10-Investmentbank, wo Sie Session IDs im laufenden Betrieb (die autorisierte Berechtigungen enthalten) erfassen und sie (über ein Tool wie Paros von ParosProxy.org) wiederverwenden konnte Führen Sie Multi-Millionen-Trades für jemandes anderen durch. Im aktuellen Klima - ist das ein Problem? ;-) Entschuldigung - so gerne würde ich auch gerne & Scham diese Clowns nennen, werde ich nicht.

Wie wahrscheinlich ist dieses Szenario? Können Sie Sitzungs-IDs in einem Switched Network erfassen? Sicherlich in einem lokalen VLAN mit dem Hacker-Tool CAIN und die Vorteile von ARP Poisioning können Sie.

In einer schlecht geschriebenen serverseitigen Anwendung können Sie auch Sitzungs-IDs vorhersagen. Überprüfe das Tool WebScarab (welches sich in einer Waffenkammer von Pen Testers befindet). Dies wird die Zufälligkeit von IDs erkennen.Bei derselben Bank mit einer anderen kritischen Anwendung können Sie Ihre eigenen Sitzungs-IDs generieren, um auf & Handelsanwendungen zuzugreifen. Ihr Fokus lag auf niedriger Latenz (was geschäftskritisch ist) und nicht auf Sicherheit.

Ein Intro kann bei Owasp.org

Noelie Dunne

+0

Nicht mit der Benutzerfrage verwandt, aber Ihre Hinweise (ARP poisioning) auf die Plausibilität von Man in der Mitte Angriffe auf ein internes vermitteltes Netzwerk ist relevant für meine Interessen (Corp Intranet-Apps sicher zu halten). Ich muss prüfen, wie unsere Infrastruktur damit umgeht. – David

+0

Es ist plausibel, aber ist in einem lokalen VLAN enthalten. Wenn Sie also Benutzer zwischen London und NYC verteilen, ist dies kein Starter, da Ihr ARP den physikalischen Switch-Port für dieses VLAN nicht übergibt. Jetzt würde ein Haufen Händler auf einer Etage dann Dinge interessant werden, wenn es native Win32 oder http ist –