Autor |
Beitrag |
Terra
      
Beiträge: 307
Windows 7 Ultimate
Delphi® XE3
|
Verfasst: Do 08.11.12 15:53
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
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: 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. 
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
Terra 
      
Beiträge: 307
Windows 7 Ultimate
Delphi® XE3
|
Verfasst: 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
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: 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.
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
Terra 
      
Beiträge: 307
Windows 7 Ultimate
Delphi® XE3
|
Verfasst: 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
      
Beiträge: 1335
Erhaltene Danke: 118
Win 10
RIO, CE, Lazarus
|
Verfasst: Do 08.11.12 16:32
Terra hat folgendes geschrieben : | 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.
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: 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. 
_________________ We are, we were and will not be.
|
|
Terra 
      
Beiträge: 307
Windows 7 Ultimate
Delphi® XE3
|
Verfasst: 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.
_________________ Gruß,
Terra
|
|