28 Stimmen

Wie vermeide ich, dass das Datenbankpasswort im Klartext im Quellcode gespeichert wird?

In der Web-Anwendung, die ich entwickle, verwende ich derzeit eine naive Lösung für die Verbindung zur Datenbank:

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

Das ist ziemlich unsicher. Wenn sich ein Angreifer Zugang zum Quellcode verschafft, erhält er auch Zugriff auf die Datenbank selbst. Wie kann sich meine Web-Anwendung mit der Datenbank verbinden, ohne das Datenbank-Passwort im Klartext im Quellcode zu speichern?

17voto

Julio César Punkte 11682

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 zur Verschlüsselung des Verbindungsstrings verwendet habe:

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

5voto

Jon Limjap Punkte 92084

In .NET ist es üblich, Verbindungszeichenfolgen in einer separaten Konfigurationsdatei zu speichern.

Daraufhin wird die Konfigurationsdatei kann verschlüsselt werden .

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

1voto

aku Punkte 118808

Ich kann diese Techniken für .NET-Programmierer empfehlen:

  • Passwort verschlüsseln \connection String in der Konfigurationsdatei
  • Einrichten einer vertrauenswürdigen Verbindung zwischen Client und Server (d. h. Verwendung der Windows-Authentifizierung usw.)

Hier finden Sie nützliche Artikel von CodeProject:

1voto

stjohnroe Punkte 3108

Wenn ich mich nicht irre, sollte die Verbindung vom Server über einen Verbindungspool verwaltet werden, d. h. die Anmeldeinformationen für die Verbindung werden vom Server und nicht von der Anwendung gehalten.

Wenn ich dies weiterführe, baue ich im Allgemeinen nach einer Konvention, bei der die Frontend-Webanwendung (in einer DMZ) nur über einen Webservice (in der Domäne) mit der DB kommuniziert, wodurch eine vollständige Trennung und eine verbesserte DB-Sicherheit erreicht wird.

Geben Sie dem db-Konto niemals mehr Rechte als unbedingt erforderlich.

Ein alternativer Ansatz besteht darin, alle Operationen über gespeicherte Prozeduren durchzuführen und dem Anwendungsbenutzer nur Zugriff auf diese Prozeduren zu gewähren.

1voto

Andrew Punkte 79

Wenn Sie MS SQL verwenden, können Sie die Vorteile der Windows-Authentifizierung nutzen, die keinen Benutzernamen/Pass irgendwo im Quellcode erfordert. Ansonsten würde ich den anderen Postern zustimmen, die app.config und Verschlüsselung empfehlen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X