Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Packet Sniffer zeigt meine DB-Anfragen an
Jack_AI
myCSharp.de - Member



Dabei seit:
Beiträge: 198
Herkunft: Erlangen

Themenstarter:

Packet Sniffer zeigt meine DB-Anfragen an

beantworten | zitieren | melden

Hallo.

Ich habe gerade einen Packet Sniffer (Ethereal) ausprobiert, um herauszufinden, was mein Programm so alles unverschlüsselt beim Verbinden mit einer MySQL-Datenbank überträgt. Und ich muss zugeben, das hat mich doch sehr überrascht! Der Packet Sniffer hat mir anzeigen können, mit welcher Datenbank ich mich verbinde, über welchen Port und mit welchem Benutzernamen. Sogar die vollständigen Querys hat er mir zeigen können! Zum Glück aber nicht das Passwort, mit dem ich mich verbinde. Warum eigentlich nicht?

Aber da ist noch ein Problem. Wenn mein Programm sich verbindet, soll der Benutzer ein Passwort eingeben, anschließend wird das eingegebene Passwort mit einem String in der Datenbank überprüft. Jetzt sendet er aber das Passwort aus der DB als klar lesbaren String zurück. Klar, das kann man mit MD5 verschlüsselt in der DB abspeichern. Da ich aber weiß, dass es Tabellen gibt, mit denen man von einem MD5-String auf den Originalstring schließen kann, bereitet mir das doch Sorgen.
private Nachricht | Beiträge des Benutzers
Coder007
myCSharp.de - Member



Dabei seit:
Beiträge: 1249

beantworten | zitieren | melden

Naja, wenn das Passwort lang/kompliziert genug ist, nutzen die Rainbow tables nichts. Und du kannst die Passwörter mit einem Salt speichern.
private Nachricht | Beiträge des Benutzers
Jack_AI
myCSharp.de - Member



Dabei seit:
Beiträge: 198
Herkunft: Erlangen

Themenstarter:

beantworten | zitieren | melden

Leider ist hier die Ressonanz nicht so groß, wie ich es mir eigentlich gewünscht hätte. Ich muss auch sagen, dass ich noch ein Laie auf dem Gebiet bin, und ein Einstieg in so ein Thema ist immer schwer.

Worum es mir eigentlich ging, ist dass ist nicht will, dass Datenbank-Querys im Klartext übertragen werden. Inzwischen bin ich auf das Thema SSL-Verschlüsselung gestoßen, das genau hier helfen soll. Erst hier habe ich bemerkt, wie komplex das Thema eigentlich ist. Und dass meine Feststellung geradezu trivial ist. Darum kann ich auch verstehen, wenn sich die Experten hier von meiner Frage gelangweilt fühlen.

Was ich inzwischen suche, ist eine Möglichkeit, MySQL-Datenbank-Querys (edit: ) KOSTENLOS zu verschlüsseln. Gleichzeitig habe ich aber KEINE Installations-Rechte auf dem Webserver, wo die Datenbank liegt! Ist dann eine Verschlüsselung überhaupt möglich?

edit4: Ich geb's langsam auf. Ich finde überhaupt keine anfängergerechten Artikel zur Verschlüsselung zu einer Datenbank. Ich habe festgestellt, dass mein Webspace-Anbieter OpenSSL aktiviert hat. Hilft mir allerdings rein gar nichts, wenn ich nicht weiß, was man damit machen kann. FuNfAcT: Hier im Forum gibt es mindestens 3 Threads zum Thema OpenSSL, die bis auf den ersten Beitrag keine Antworten enthalten. Gibt mir zu denken...
Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von Jack_AI am .
private Nachricht | Beiträge des Benutzers
Cookiie
myCSharp.de - Member

Avatar #avatar-2328.jpg


Dabei seit:
Beiträge: 364
Herkunft: früher Leipzig, jetzt Out of Rosenheim

beantworten | zitieren | melden

Hi, der letzte Satz in deinem Post hat mich auf die Idee gebracht. Mit SSL verschlüsselst du ja die komplette Verbindung, sämtlicher Verkehr der hinterher erzeugt wird ist dann somit verschlüsselt.
Der Ansatz ist als, anstatt jede Anfrage einzeln gleich die komplette Verbindung abzusichern.
Wobei ich da eh zu bedenken gebe das es nie gut ist wenn die DB direkt aus dem Netz heraus ansprechbar ist. Wenn das möglich ist würde ich da noch nen Programm dazwischen hängen, welches die Kommunikation übernimmt und die Anfragen an die DB weiterleitet.

Gruß Cookiie
"Hail to the King, Baby!"
private Nachricht | Beiträge des Benutzers
Jack_AI
myCSharp.de - Member



Dabei seit:
Beiträge: 198
Herkunft: Erlangen

Themenstarter:

beantworten | zitieren | melden

Zitat
Original von Cookiie
Wobei ich da eh zu bedenken gebe das es nie gut ist wenn die DB direkt aus dem Netz heraus ansprechbar ist. Wenn das möglich ist würde ich da noch nen Programm dazwischen hängen, welches die Kommunikation übernimmt und die Anfragen an die DB weiterleitet.

Hallo Cookiie,

das hat mich widerum auch auf eine Idee gebracht. Ich könnte theoretisch die Datenbank-Anfragen von meinem Programm verschlüsseln lassen, an ein PHP-Skript schicken, und die widerum von dem PHP-Skript auf meinem Websprace entschlüsseln lassen. Das Skript übernimmt die Datenbank-Abfrage und sendet das Ergebnis widerum verschlüsselt an das Programm zurück (bzw. mein Programm liest das Ergebnis von meinem Webspace aus).

Also so:
Programm sendet DB-Anfrage (verschlüsselt) an PHP-Skript
PHP-Skript sendet DB-Anfrage (unverschlüsselt) an Datenbank
Datenbank sendet DB-Ergebnis (unverschlüsselt) an PHP-Skript
PHP-Skript übergibt DB-Ergebnis (verschlüsselt) an öffentlichen Webspace
Programm holt das DB-Ergebnis (verschlüsselt) vom Webspace
Programm entschlüsselt das DB-Ergebnis

Ich bezweifle zwar, dass die Lösung sicher ist, allerdings entspricht das noch am ehesten meinen Fähigkeiten. Jetzt müssten das PHP-Skript und mein Programm nur auf die selbe Art ver- und entschlüsseln können. Der ganze Programmier-Aufwandt... Ay caramba.
private Nachricht | Beiträge des Benutzers
Lion1984
myCSharp.de - Member



Dabei seit:
Beiträge: 782
Herkunft: Österreich

beantworten | zitieren | melden

Zitat
Also so:
Programm sendet DB-Anfrage (verschlüsselt) an PHP-Skript
PHP-Skript sendet DB-Anfrage (unverschlüsselt) an Datenbank
Datenbank sendet DB-Ergebnis (unverschlüsselt) an PHP-Skript
PHP-Skript übergibt DB-Ergebnis (verschlüsselt) an öffentlichen Webspace
Programm holt das DB-Ergebnis (verschlüsselt) vom Webspace
Programm entschlüsselt das DB-Ergebnis

Warum überspringst du nicht:
Zitat
PHP-Skript übergibt DB-Ergebnis (verschlüsselt) an öffentlichen Webspace
Programm holt das DB-Ergebnis (verschlüsselt) vom Webspace
und liesst das verschlüsstel DB Verzeichniss dirket aus ?

lg
lg Lion
private Nachricht | Beiträge des Benutzers
Jack_AI
myCSharp.de - Member



Dabei seit:
Beiträge: 198
Herkunft: Erlangen

Themenstarter:

beantworten | zitieren | melden

Zitat
Warum überspringst du nicht:
Zitat
PHP-Skript übergibt DB-Ergebnis (verschlüsselt) an öffentlichen Webspace
Programm holt das DB-Ergebnis (verschlüsselt) vom Webspace
und liesst das verschlüsstel DB Verzeichniss dirket aus ?

lg

Hallo lg,

da habe ich mir wohl nicht genau ausgedrückt. Ich meinte, dass das PHP-Skript direkt hintereinander die Anfrage sendet, das Ergebnis verschlüsselt und ausgibt. Also, mit öffentlichem Webspace meinte ich die PHP-Ausgabe (dann in HTML-Form), die anschließend vom Programm ausgelesen wird. Gibt es ansonsten etwas an der Idee auszusetzen?

Jack

edit:
Mir ist doch ein Problem dabei aufgefallen: Wenn ich in kurzer Zeit zwei Datenbank-Anfragen verarbeiten muss, kommt das PHP-Skript wahrscheinlich nicht hinterher und gibt mir entweder eine veraltete Anfrage aus oder bricht eine Anfrage zuvor ab. Hach, ist das alles kompliziert! Ich gebe die Hoffnung nicht auf, dass hier vielleicht doch jemand etwas Ahnung davon hat, wie man OpenSSL bedient.

Jack²
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von Jack_AI am .
private Nachricht | Beiträge des Benutzers
Jack_AI
myCSharp.de - Member



Dabei seit:
Beiträge: 198
Herkunft: Erlangen

Themenstarter:

beantworten | zitieren | melden

Für alle, die es interessiert:

Ich habe mich seit meinem letzten Post hier intensiv mit OpenSSL beschäftigt. Bis jetzt habe ich nicht herausfinden können, ob OpenSSL überhaupt mit C# kompatibel ist (ich fürchte aber nein), geschweige denn, wie man es in eine eigene Anwendung integriert. OpenSSL ist, meiner Meinung nach, alles andere als anfängerfreundlich und ebenso wenig gut dokumentiert. Ich könnte mich noch Stunden damit beschäftigen... würde dann aber wahrscheinlich noch immer nicht wissen, ob es überhaupt für mein Programm geeignet ist.

Fazit: Anfänger, Finger weg von OpenSSL!

Folglich bin ich nun auf der Suche nach einer anderen, anfängergerechten Möglichkeit, meine Datenbank-Anfragen zu verschlüsseln. Für Hinweise wäre ich sehr verbunden! (edit: Ich habe auch ein Buch zu dem Thema überflogen, Network Security with OpenSSL, dort steht, eine eigene Verschlüsselung ist NICHT zu empfehlen, da selbst Kryptographie-Experten Schlupflöcher in ihrem Sourcecode übersehen)

Danke,
Jack
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Jack_AI am .
private Nachricht | Beiträge des Benutzers
cemizm
myCSharp.de - Member



Dabei seit:
Beiträge: 11
Herkunft: Bielefeld

beantworten | zitieren | melden

@Jack_AI

Wie wäre es mit einem Webservice? Ich würde die ganzen Abfragen etc.. erst garnicht in die GUI reinpacken sondern im Webservice implementieren. So könnte man auch weiterhin die mächtigen werkzeuge wie DataSet etc.. nutzen.
  • GUI ruft WebMethod holeKunde(int) auf
  • WebService sendet query an DB
  • Result wird dann entweder in ein DataSet/DataTable gepackt oder du implementierst eine Klasse Kunde mit den jeweiligen Attributen
  • Dann haste das DataSet bzw. Objekt gleich in der GUI als Rückgabewert der WebMethod holeKunde(int)


So müsstest du auch keine Datenbank-Abfragen oder Mysql-Passwörter übers Netz schicken und die MD5 verschlüsselung reicht vollkommen aus um Benutzerpasswörter zu übertragen. So würde auch der Fehler beim Benutzer liegen wenn er ein zu einfaches Passwort nimmt.

Nachteil:
Du müsstest zwei Anwendungen gleichzeitig entwickeln und auf jeder Seite auch wieder die Eingabeüberprüfung machen etc..

Vorteil:
Deine Anwendung ist GUI unabhänging, so hast du in Zukunft die Möglichkeit deine GUI bspw. in Java zu entwickeln oder die Anwendung auf ein anderes System (zb. Smartphone) zu portieren.

Mfg
private Nachricht | Beiträge des Benutzers
Zen
myCSharp.de - Member



Dabei seit:
Beiträge: 48

beantworten | zitieren | melden

Könnte man diesen Vorgang auch mit C# und PHP gut realisieren?

Ich habe mal versucht, einen String mit C# und AES-256 zu verschlüsseln und dann an PHP zu schicken (Formular) und PHP entschlüsselt es und macht es in eine Datenbank. Das ganze hat nur leider nicht geklappt, weil beide Sprachen anders ver-/entschlüsselt haben.

Hat vllt einer ein Beispiel, wie C# einen String verschlüsselt und PHP es dann entschlüsselt?


Zen
private Nachricht | Beiträge des Benutzers
Jack_AI
myCSharp.de - Member



Dabei seit:
Beiträge: 198
Herkunft: Erlangen

Themenstarter:

beantworten | zitieren | melden

Ich muss die Problematik leider noch einmal hervorkramen. Erst einmal noch eine seit Langem ausstehende Antwort:
Zitat
Original von cemizm
Wie wäre es mit einem Webservice? Ich würde die ganzen Abfragen etc.. erst garnicht in die GUI reinpacken sondern im Webservice implementieren. So könnte man auch weiterhin die mächtigen werkzeuge wie DataSet etc.. nutzen.

Hallo cemizm,
Danke für den Tipp. Leider ist liegt die von dir vorgeschlagene Lösung weit über meinen Programmierfertigkeiten. Mir wäre eine "anfängergerechte" Lösung vorerst lieber.

Und noch einmal zum Hauptthema:
Angenommen ich habe eine Datei mit hartgecodeten Verbindungsdaten, um auf einen Server zugreifen zu können. Muss ich dann befürchten, dass diese Daten aus dem MSIL-Code herausgelesen werden können? Ich habe selber noch nie eine Datei auf diese Art "re-engineert", aber angeblich soll das ja ziemlich einfach sein... wenn man weiß, wie es geht.

Jack
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 10083

beantworten | zitieren | melden

Ja, und dieses Thema haben wir in diesem Forum schon bis zum erbrechen behandelt.

Deshalb hat ist das auch schon bis in die FAQ vorgedrungen :
[FAQ] DB-Passwort/Connection-String sicher speichern
private Nachricht | Beiträge des Benutzers
Jack_AI
myCSharp.de - Member



Dabei seit:
Beiträge: 198
Herkunft: Erlangen

Themenstarter:

beantworten | zitieren | melden

Zitat
Original von FZelle
Ja, und dieses Thema haben wir in diesem Forum schon bis zum erbrechen behandelt.

Deshalb hat ist das auch schon bis in die FAQ vorgedrungen :
[FAQ] DB-Passwort/Connection-String sicher speichern

Ich bin zuvor schon einmal auf die Links gestoßen, habe sie aber damals nicht in Zusammenhang mit MSIL-Reengineering gebracht. Auf die FAQ hättest Du auch netter hinweisen können.

Jack
private Nachricht | Beiträge des Benutzers