Frage

In der Webanwendung, die ich entwickle, verwende ich derzeit eine naive Lösung, wenn ich eine Verbindung zur Datenbank herstelle:

Connection c = DriverManager.getConnection("url", "username", "password");

Das ist ziemlich unsicher.Wenn ein Angreifer Zugriff auf den Quellcode erhält, erhält er auch Zugriff auf die Datenbank selbst.Wie kann meine Webanwendung eine Verbindung zur Datenbank herstellen, ohne das Datenbankkennwort im Klartext im Quellcode zu speichern?

War es hilfreich?

Lösung

Sie können die Verbindungszeichenfolge in der Datei Web.config oder App.config speichern und den Abschnitt, der sie enthält, verschlüsseln.Hier ist ein sehr guter Artikel, den ich in einem früheren Projekt zum Verschlüsseln der Verbindungszeichenfolge verwendet habe:

http://www.ondotnet.com/pub/a/dotnet/2005/02/15/encryptingconnstring.html

Andere Tipps

In .NET besteht die Konvention darin, Verbindungszeichenfolgen in einer separaten Konfigurationsdatei zu speichern.

Daraufhin die Die Konfigurationsdatei kann verschlüsselt werden.

Wenn Sie Microsoft SQL Server verwenden, wird dies alles irrelevant, wenn Sie zum Ausführen der Anwendung ein Domänenkonto verwenden, das dann eine vertrauenswürdige Verbindung zur Datenbank verwendet.In diesem Fall enthält die Verbindungszeichenfolge keine Benutzernamen und Passwörter.

Diese Techniken kann ich .NET-Programmierern empfehlen:

  • Passwort\Verbindungszeichenfolge in der Konfigurationsdatei verschlüsseln
  • Richten Sie eine vertrauenswürdige Verbindung zwischen Client und Server ein (d. h.Windows-Authentifizierung verwenden usw.)

Hier sind nützliche Artikel von CodeProject:

Sofern ich nicht den Punkt übersehe, sollte die Verbindung vom Server über einen Verbindungspool verwaltet werden, daher werden die Verbindungsanmeldeinformationen vom Server und nicht von der App gespeichert.

Wenn ich das noch weiter ausbaue, gehe ich im Allgemeinen von einer Konvention aus, bei der die Frontend-Webanwendung (in einer DMZ) nur über einen Webdienst (in der Domäne) mit der Datenbank kommuniziert und so eine vollständige Trennung und verbesserte Datenbanksicherheit bietet.

Erteilen Sie dem Datenbankkonto außerdem niemals Berechtigungen, die über das unbedingt erforderliche Maß hinausgehen.

Ein alternativer Ansatz besteht darin, alle Vorgänge über gespeicherte Prozeduren auszuführen und dem Anwendungsbenutzer nur Zugriff auf diese Prozesse zu gewähren.

Vorausgesetzt, Sie verwenden MS SQL, können Sie die Windows-Authentifizierung nutzen, die keinen Benutzernamen/Passwort im Quellcode erfordert.Ansonsten müsste ich den anderen Postern zustimmen, die app.config + Verschlüsselung empfehlen.

  1. Erstellen Sie einen O/S-Benutzer
  2. Geben Sie das Kennwort in eine Betriebssystemumgebungsvariable für diesen Benutzer ein
  3. Führen Sie das Programm als dieser Benutzer aus

Vorteile:

  1. Nur Root oder dieser Benutzer können die Betriebssystemumgebungsvariablen dieses Benutzers anzeigen
  2. Überlebt Neustart
  3. Sie checken Ihr Passwort nie versehentlich in die Quellcodeverwaltung ein
  4. Sie müssen sich keine Sorgen darüber machen, dass Dateiberechtigungen verfälscht werden
  5. Sie müssen sich keine Gedanken darüber machen, wo Sie einen Verschlüsselungsschlüssel speichern
  6. Funktioniert mit der X-Plattform
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top