Ich habe gehört, dass das Offenlegen von Datenbank-IDs (z. B. in URLs) ein Sicherheitsrisiko darstellt, aber ich habe Probleme zu verstehen, warum.
Irgendwelche Meinungen oder Links darüber, warum es ein Risiko ist oder warum es nicht ist?
BEARBEITEN: Natürlich ist der Zugriff begrenzt. Wenn Sie beispielsweise keine Ressource sehen können foo?id=123
, wird eine Fehlerseite angezeigt . Andernfalls sollte die URL selbst geheim sein.
BEARBEITEN: Wenn die URL geheim ist, enthält sie wahrscheinlich ein generiertes Token mit einer begrenzten Lebensdauer, z. B. 1 Stunde gültig und kann nur einmal verwendet werden.
BEARBEITEN (Monate später): Meine derzeit bevorzugte Vorgehensweise besteht darin, UUIDS für IDs zu verwenden und diese verfügbar zu machen. Wenn ich fortlaufende Nummern (normalerweise für die Leistung einiger DBs) als IDs verwende, möchte ich für jeden Eintrag ein UUID-Token als alternativen Schlüssel generieren und diesen verfügbar machen.
Dies ist zwar kein Datensicherheitsrisiko , aber absolut ein Business-Intelligence-Sicherheitsrisiko , da sowohl die Datengröße als auch die Datengeschwindigkeit offengelegt werden. Ich habe gesehen, wie Unternehmen dadurch geschädigt wurden, und habe ausführlich über dieses Anti-Muster geschrieben. Sofern Sie nicht nur ein Experiment und kein Unternehmen aufbauen, würde ich dringend empfehlen, Ihre privaten Ausweise nicht in die Öffentlichkeit zu bringen. https://medium.com/lightrail/prevent-business-intelligence-leaks-by-using-uuids-instead-of-database-ids-on-urls-and-in-apis-17f15669fd2e
quelle
Es hängt davon ab, wofür die IDs stehen.
Stellen Sie sich eine Website vor, die aus Wettbewerbsgründen nicht veröffentlichen möchte, wie viele Mitglieder sie haben, aber durch die Verwendung sequentieller IDs wird dies trotzdem in der URL angezeigt : http://some.domain.name/user?id=3933
Wenn sie stattdessen den Anmeldenamen des Benutzers verwenden: http://some.domain.name/user?id=some , haben sie nichts preisgegeben, was der Benutzer noch nicht wusste.
quelle
Der allgemeine Gedanke lautet wie folgt: "Geben Sie so wenig Informationen über das Innenleben Ihrer App an Dritte weiter."
Das Offenlegen der Datenbank-ID gilt als Offenlegung einiger Informationen.
Gründe dafür sind, dass Hacker Informationen über das Innenleben Ihrer Apps verwenden können, um Sie anzugreifen, oder dass ein Benutzer die URL ändern kann, um in eine Datenbank zu gelangen, die er / sie nicht sehen soll.
quelle
Wir verwenden GUIDs für Datenbank-IDs. Sie zu lecken ist viel weniger gefährlich.
quelle
Wenn Sie in Ihrer Datenbank ganzzahlige IDs verwenden, können Sie Benutzern das Anzeigen von Daten erleichtern, die sie nicht sehen sollten, indem Sie die qs-Variablen ändern.
Zum Beispiel könnte ein Benutzer den id-Parameter in diesem qs leicht ändern und Daten sehen / ändern, die er nicht http: // someurl? Id = 1 sollte
quelle
Wenn Sie Datenbank - IDs an Ihren Kunden senden , werden Sie gezwungen , die Sicherheit in beiden Fällen zu überprüfen. Wenn Sie die IDs in Ihrer Websitzung behalten, können Sie auswählen, ob Sie dies tun möchten / müssen, was möglicherweise weniger Verarbeitung bedeutet.
Sie versuchen ständig, Dinge an Ihre Zugriffskontrolle zu delegieren;) Dies mag in Ihrer Anwendung der Fall sein, aber ich habe in meiner gesamten Karriere noch nie ein so konsistentes Back-End-System gesehen. Die meisten von ihnen verfügen über Sicherheitsmodelle, die für die Verwendung außerhalb des Webs konzipiert wurden, und einige haben posthum zusätzliche Rollen hinzugefügt, und einige davon wurden außerhalb des zentralen Sicherheitsmodells angeschraubt (weil die Rolle beispielsweise in einem anderen betrieblichen Kontext hinzugefügt wurde vor dem Web).
Wir verwenden also lokale IDs für synthetische Sitzungen, da diese so viel verbergen, wie wir können.
Es gibt auch das Problem von nicht ganzzahligen Schlüsselfeldern, was bei Aufzählungswerten und Ähnlichem der Fall sein kann. Sie können versuchen, diese Daten zu bereinigen, aber es besteht die Möglichkeit, dass Sie wie kleine Bobby-Drop-Tische enden .
quelle