Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Datenbankpasswort unkenntlich machen.


Terra - Do 08.11.12 15:53
Titel: Datenbankpasswort unkenntlich machen.
Hallo zusammen,

bin grade dabei eine Login-Routine für ein Programm zu erstellen, die mittels MySQL Datenbank im Internet funktionieren soll.

Mir ist aufgefallen, das wenn ich das Passwort in die MySQL Komponente mit eintrage, diese in der Compilierten EXE Datei voll sichtbar ist. Das ist aber nicht der Sinn der Sache.

Möglicher Weise gehe ich die ganze Sache auch falsch an. Welche Möglichkeit bietet sich als einfachste Grundlage an, das Passwort so zu verstecken, das nicht einmal in der Compilierten Version das Passwort mehr sichtbar ist?

Eine Verschlüsselungs Routine wäre eine Möglichkeit - finde das aber für einen einzelen String etwas umständlich, da allein nur diese eine MySQL Abfrage implementiert ist.

Gruß,
Terra


Nersgatt - Do 08.11.12 16:00

Kurz: es gibt keine Möglichkeit!
Spätestens wenn Du Dich an die Datenbank anmeldest, musst Du ja vorher das Passwort entschlüsseln und ggf. über das Netzwerk übertragen. Das ließe sich leicht mit einem Sniffer mitlesen. Also verwende nicht zu viel Mühe auf ein unlösbares Problem. :wink:


Terra - Do 08.11.12 16:12

Vielleicht ist das Problem wirklich unlösbar, aber man könnte doch sicher irgendwie dem User es irgendwie sichtlich erschweren an das Passwort zu kommen, als nur mal schnell in den SourceCode der EXE Datei zu schauen.

Ich denke da jetzt auch nicht an eine SuperMega Verschlüsselung sondern einfach den String irgendwie verändern, das er im Source nicht unbedingt gleich einen Sinn macht.

Vielleicht so in etwa:
Passwort := %20%44%F1%C2;

Es müsste aber für Delphi dennoch einen Sinn machen.

Gruß,
Terra


Nersgatt - Do 08.11.12 16:15

Du könntest das Passwort mit einer XOR-Verschlüsselung etwas unkenntlicher machen. Oder mit einem Caesar-Chiffre.
Aber Du musst Dir halt bewusst sein, dass Du damit keinerlei Sicherheit erreichst.


Terra - Do 08.11.12 16:32

Naja, Sicherheit hat man nie wirklich. Wer in die Datenbank rein will, der kommt auch rein.

Habe es jetzt mal so gemacht:
Passwort := Chr(115)+Chr(111)+Chr(117)+Chr(97);

Scheint erstmal was zu bringen, da ich den String nicht als Text im Source endecken kann.
Danke dennoch für die Ansätze.

Denke mal, das sich damit die Frage beantwortet hat.

Gruß,
Terra


Sinspin - Do 08.11.12 16:32

user profile iconTerra hat folgendes geschrieben Zum zitierten Posting springen:
Vielleicht so in etwa:
Passwort := %20%44%F1%C2;

Es müsste aber für Delphi dennoch einen Sinn machen.
Den Sinn musst Du da schon reinbringen. Aber das Passwort in die Komponente auf dem Form zu schreiben das es in der EXE dann aus der DFM des Forms schön auszulesen ist, ist jedenfalls keine gute Idee. Ich lege solche Passwörter leicht verschlüsselt auf eine Konstante. Bei Bedarf werden sie entschlüsselt und zugewießen. Das ist aber nur vor denen ein Schutz die sich mit dem Durchsuchen der Exe nach Texten zufrieden geben. Und dann kannst du eigentlich auch schon ein Password verwenden was aus Buchstabensalat(+Zahlen und Sonderzeichen) besteht verwenden.
Wenn du den Spion etwas mehr ärgern willst kannst Du mehr als ein Passwort ablegen, eins passt die anderen nicht. Und probierst dann einfach alle durch wenn Du eine connection aufbaust. Allerdings machen das Spielchen die wenigsten Server sonderlich erfreut mit.
Aber wer ein bisschen Ausdauer hat findet auch dann raus was er wissen will.


Gausi - Do 08.11.12 17:17

Das kann man so machen, ja. Sei dir aber bewusst, dass selbst ein Hacker-Noob das Passwort in einer Minute rausbekommt. Ich hab ein ähnliches Problem auch mal gehabt, und den String dann auch mit was anderem ge-XOR-ed, um den im Code zu verstecken. Dann mal testweise OllyDbg (oder so ähnlich) angeschmissen, und schwupps konnte ich den String im Klartext darin lesen.

Edit: Und wenn das auch noch unverschlüssselt abläuft, dann reicht einfach Wireshark, also den Netzverkehr sniffen.

Wenn das Passwort also in irgendeinerweise geschützt bleiben soll, würde ich da nach einem anderen System suchen. ;-)


Terra - Do 08.11.12 21:10

Mir würde da noch etwas von früher einfallen, was mehr ein indirekter Weg wäre. Ich habe das so zwar noch nie versucht aber die Idee schwebt mir schon seit einiger Zeit im Kopf rum.

"Einfach" mittels einer API. (Thema: SOAP)
Im Grunde würde dann alles PHP übernehmen und ich mittels einer Schnittstelle in PHP das Login abfragen.
Die Frage hierbei ist aber - wie sicher ist das ganze, wenn ich eine Schnittstelle zu den Login-Daten freigebe?

Aber die ganze Geschichte wäre mir z.Z. noch eine Nummer zu hoch.
Es würde nur ein "true" oder "false" vom Server kommen und man muss kein Passwort im Programm haben.
Also Login-Daten Verschlüsselt an die SOAP Schnittstelle senden und Ergebnis abfragen und verarbeiten.

Was würdet ihr dazu sagen?
Frage ist aber auch, ob das nicht zu viel Performance kostet.