2009-07-02 4 views
4

In meiner Winforms-Anwendung hashing ich die Verbindungszeichenfolge auf lokaler Ebene.Schützen der Verbindungszeichenfolge von Man in der Mitte

Aber hier ein paar Fragen.

Nachdem die App die Verbindungszeichenfolge entschlüsselt hat, wird die Verbindungszeichenfolge im Klartext gesendet. Und da meine App lokal installiert ist, könnte der Mann in der Mitte jeder Benutzer sein?

Wie kann ich die Verbindungszeichenfolge schützen, beklagt die Option "force encryption", die ein zusätzliches Zertifikat erfordert?

+0

Ihre App kann Hashes entschlüsseln? – yfeldblum

Antwort

7

Sie haben hier nur eine begrenzte Anzahl von Ansätzen hinsichtlich der Sicherheit Ihres Verbindungsstrangs.

Eine Option, wenn Ihre Verbindungszeichenfolge in einer Datei web.config oder app.config (für Web- bzw. Windows-Anwendungen) gespeichert ist, können Sie den Wert verschlüsseln. Ist hier ein paar Links, die detailliert, wie das getan werden kann:

Encrypting Web.Config Values in ASP.NET 2.0

Encrypt Connection Strings in VS 2005 .config Files

Natürlich, wie Sie ganz richtig sagen, dies ist die Sicherheit nicht erreichen können, die Sie sich wünschen, da die Anwendung kann Gut läuft auf dem Computer des Benutzers, und somit die app.config-Datei (auch in einem verschlüsselten Zustand) und die zugehörigen Verschlüsselungs-/Entschlüsselungsschlüssel wird auch auf dem Computer des Benutzers verfügbar sein. Ein sachkundiger und unternehmungslustiger Benutzer könnte dann Zugang zu Ihrer "Klartext" Verbindungszeichenfolge erhalten.

IMHO, eine der besten Möglichkeiten, um zu verhindern, dass Ihre Benutzer Ihre Datenbankverbindungszeichenfolge sehen, ist, sie niemals an sie zu geben, verschlüsselt oder nicht. Dies würde erfordern, dass Ihre Windows-Formularanwendung nicht direkt mit einer Datenbank kommuniziert (mit einer Verbindungszeichenfolge), sondern direkt mit einem Webdienst kommuniziert.

Natürlich würden Sie der Windows-Formularanwendung eine URL geben, mit der sie auf den Webdienst zugreifen können, aber dann wird die Verwendung dieses Webdienstes eingeschränkt und kontrolliert, indem nur Zugriff mit einer benutzerspezifischen Kombination aus Benutzername und Kennwort gewährt wird .

Auf diese Weise können Sie die Web-Service-Host (muss nicht sein, web service - es könnte eine Remote-Anwendung sein, die Ihre Windows-Formularanwendung mit über .NET remoting oder WCF kommunizieren würde) auf einer physisch getrennten Server/Maschine, Sie tun haben vollständige Kontrolle über und schützen Sie diese Maschine mit perimeter security.

Die Anwendungen und Dienste, die auf diesem sicheren Computer ausgeführt werden, haben Zugriff auf die Verbindungszeichenfolge der Datenbank, und diese Verbindungszeichenfolge darf niemals außerhalb des Umfangs dieses Computers verbreitet werden. vorausgesetzt, dass die oben genannte Perimetersicherheit vorhanden ist und effektiv ist).

Natürlich würde die Implementierung all dies sicherlich bedeuten, große architektonische Änderungen an Ihrer Anwendung, die, abhängig von der Größe und Art Ihrer Anwendung, lohnt oder nicht lohnt, jedoch die einzige Möglichkeit, Ihre wirklich zu sichern Die Verbindungszeichenfolge von einem Benutzer (oder der Maschine eines Benutzers) stellt sicher, dass sie niemals (in verschlüsselter oder entschlüsselter Form) für den Benutzer (oder den Computer des Benutzers) verfügbar ist.

Sobald Sie die Verbindungszeichenfolge auf dem Computer des Benutzers, auch in einem verschlüsselten Zustand, müssen Sie die gleiche Maschine, die die verschlüsselte Verbindungszeichenfolge entschlüsseln können, geben, und es gibt die schwache Verbindung in der Kette und der Punkt, an dem (zu einem findigen Benutzer) Ihre Klartextverbindungszeichenfolge bestimmt werden kann. Sie könnten die Entschlüsselung der verschlüsselten Verbindungszeichenfolge auf eine andere (sichere) Maschine abladen, aber das ist nur eine Abwandlung des zuvor erwähnten Client-Server-Mechanismus, wobei der Teil, der sicher gehalten wird (Entschlüsselungsschlüssel, Verbindungszeichenfolge usw.), ausgeführt wird auf einer anderen Maschine unter Ihrer eigenen sicheren Kontrolle.

+0

"aber dann wird die Nutzung dieses Web-Service eingeschränkt und kontrolliert, indem nur Zugriff mit einer benutzerspezifischen Kombination aus Benutzername und Passwort erlaubt wird." ... Huhn und Ei Problem, nicht? ... Sie müssen nun den Benutzernamen verstecken/password – BlackTigerX

+0

@BlackTigerX - Ich sehe was du sagst, aber es gibt keinen Grund, dass der Benutzername/Passwort-Combo, der mit dem Webservice verwendet wird, in der Anwendung fest codiert sein muss (so wie eine Verbindungszeichenfolge irgendwo sein müsste) könnte in einen manuellen Authentifizierungsmechanismus eingebunden werden, die Anmeldeinformationen, die der Benutzer zur Laufzeit bereitstellen müsste (wie beispielsweise die Anmeldung bei Windows). – CraigTP

4

Sie können die Verbindungszeichenfolge nicht schützen. Was Sie tun können, ist über SSL Secure Channel verbinden.