Sichere Verbindung zu einer MySQL-Datenbank

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von Dodo.

    Sichere Verbindung zu einer MySQL-Datenbank

    Hey!

    Ich hoffe das passt hier hin.

    Mich würde es mal interessieren, wie man sich sicher mit einer MySQL-Datenbank verbindet (via PHP, da die DB keine externen Zugriffe erlaubt), ohne dass man die Datenbank manipulieren oder man die Daten mitlesen kann.

    Wir können ja hier ein paar Konzepte sammeln :)

    MFG Solaris
    Richtig sicher wirste das nicht hinbekommen, da man ein VB Programm immer dekompilieren kann.

    Das Script bekommt man heraus, du müsstest dir halt einen Algorithmus entwickeln welcher den Zugriff auf das Script erlaubt.

    z.B. dein Programm macht den ersten Request, das PHP Script gibt ein paar Zahlen aus und generiert sich slebst einen privaten Schlüssel, mit diesen Zahlen wird im VB Programm ebenso ein Schlüssel generiert der dann beim nächsten Request, wo auch der Query gesendet wird, mitgesendet wird und wenn dieser Schlüssel Stimmt führt das Script den Query aus.

    Aber wenn jemand schlau ist und wirklich sich hintersetzt um den mechanismus heraus zubekommen, wird er das sicher auch hinbekommen.
    Die Programme wurden sicher nicht in VB Programmiert, heißt wenn die ein Verschlüsselungsalgorithmus haben, bekommt man den nicht so leicht durch dekompilieren heraus, zudem muss man sich bei Steam mit einem Benutzeraccount anmelden, wenn man sowas hat, wärs wieder möglich.
    Das Anmelden funktioniert sicher ähnlich wie in einem Browser, Benutzername und PW werden an ein Script geschickt welches zunächst den Query ausführt und prüft und dann etwas an Steam zurück gibt was signalisiert, dass der Benutzer nun eingeloggt ist und vlt. noch irgendein Hash mit dessen Hilfe die Pakete verschlüsselt werden.

    Also wenn man ein Login macht, wäre die Verbindung deutlich einfacherer, probleme gibts nur wenn man auf eine SQL Datenbank zugreifen möchte OHNE ein Login, sondern dein Programm verteilste du und dieses soll von jedem Client etwas aus der DB auslesen oder sonstiges. Diese Verbindung ließe sich dann schwer so sicher machen, dass niemand drauf käme wie er selbst Queries ausführt.
    Nun das würde ich dann normal über ein PHP Script regeln, du machst ein WebRequest

    Quellcode

    1. http://www.deinserver.de/script.php?user=Dodo&passwd=12345678


    Im Script prüfst du diese Daten dann

    PHP-Quellcode

    1. <?php
    2. $username = mysql_real_escape_string($_GET['user']);
    3. $password = md5(mysql_real_escape_string($_GET['passwd']));
    4. $qResult = mysql_query("SELECT `userID`, `username`, `password` FROM `user` WHERE `username` = '$username' AND `password` = '$password' LIMIT 1");
    5. $result = mysql_fetch_object($qResult);
    6. if($username = $result->username && $password = $result->password) {
    7. echo $result->userID."\n".md5($username."blairgendwas");
    8. } else {
    9. echo "failed";
    10. }


    In VB prüfst du dann ebenfalls ob die Prüfsumme Username + "blairgendwas" die gleiche ist wie im Quelltext.
    Am sichersten ist es wenn man mit einem Client-Server arbeitet.

    Bedeutet:

    Client <-> Server <-> Datenbank

    Dein Client hat somit keinen direkten zugriff auf die Datenbank und muss den umweg über den Server nehmen.

    Mit einem eigenen Protokoll kann man das schon sehr sicher machen.
    @Diablo: das liegt an .NET weil Kompilierte Programme nicht wie bei c++ in Maschinencode umgewandelt werden sondern in CIL-Code und den kann man mit relativ einfachen Mitteln dekompilieren.

    @Rocky: nunja über ein PHP Script wäre es ja über ein "Server" problem ist, dass man die Funktionen rausbekommen kann und dann manuell ausführen, auch wenn keine Queries direkt übergeben werden sondern nur zum löschen eines Datensatzes z.B.

    Quellcode

    1. http://www.server.de/script.php?action=delete&id=32


    wenn man diese URL herausbekommt kann man ebenso die DB zerstören. Demzufolge wäre es besser wenn man ein Packet im VB Programm verschlüsselt und dieses an das Script schickt und dort wirds entschlüsselt und die Aktion + ID usw. rausgelesen.
    Problem ist, den Verschlüsselungsalgorithmus muss sich jeder selbst schreiben, damit es eben kein anderer nutzen kann.
    Dodo:

    Könntest du uns vielleicht ein kleines Beispiel solch einer sicheren Verbindung zeigen? Mit einem einfachen Beispielalgorithmus. Das wäre sehr nett von dir :)
    "I think Microsoft has abused the Windows brand so much that it has lost its cachet."
    Paul Thurrott
    Dann weiß ja jeder wie es geht und das ist nicht der Sinn xD
    Nunja damit kann zwar niemand alles auslesen, aber auch das Programm braucht ja paar Infos wie z.B. Benutzerdaten und wenn da eine Abfrage kommt könnte das jemand auch manuell ausführen und somit Daten lesen die er nicht sehen soll, ebenso das löschen von Datensätzen muss das Programm sicher auch mal machen und das könnte man auch manuell machen wenn man die URL kennt.
    Heißt man kann zwar keine direkten Queries ausführen, aber trotzdem mit dem Management über das PHP Script die DB zerstören oder Daten beschaffen die nicht jeder sehen soll.
    Jein. Nur in Kombination mit etwas anderem.
    Nicht umbedingt, der UserAgent wird ja auch im Klartextübertragen und da braucht nur jemand mitsniffen und bekommt den heraus und einen UserAgent der Browser zu ändern ist ein Kinderspiel, ebenso das setzten des UserAgents der WebRequest Klasse.

    Ich habe für meine MySqlLib3 ein Verfahren ausklamüsert, wovon ich meine, das es ziemlich sicher ist. Aber dafür ist auch das Handling dadurch etwas komplizierter geworden und man benötigt ein weiteres Programm.