[gelöst] Passwort im Programm verstecken
[gelöst] Passwort im Programm verstecken
Hi
Ich habe mit Google nicht das richtige gefunden.
Das beste war hier zu finden
viewtopic.php?f=12&t=13339
Allerdings trifft es nicht genau das was ich suche.
Mein Programm nutzt eine MySQL DB im Netz.
Um mit dieser zu kommunizieren bedarf es eines Passwortes welches ich beim Provider einrichten musste.
Bis jetzt hatte ich das Passwort recht ungeschützt(wie ich feststellen musste) einfach "hard gecodet".
An den Quellcode kommt keiner ran, aber man kann die .exe untersuchen und könnte fündig werden.
Was wäre hier die beste Vorgehensweise in Bezug auf Sicherheit?
Der Quellcode soll vielleicht mal öffentlich gemacht werden, und dann sollte da ja eigentlich auch gar nix mehr im Quellcode zu finden sein oder?
Sollte ich die Kommunikation mit der DB aus dem Programm auslagern?
Eine .dll oder so?
Ich habe mit Google nicht das richtige gefunden.
Das beste war hier zu finden
viewtopic.php?f=12&t=13339
Allerdings trifft es nicht genau das was ich suche.
Mein Programm nutzt eine MySQL DB im Netz.
Um mit dieser zu kommunizieren bedarf es eines Passwortes welches ich beim Provider einrichten musste.
Bis jetzt hatte ich das Passwort recht ungeschützt(wie ich feststellen musste) einfach "hard gecodet".
An den Quellcode kommt keiner ran, aber man kann die .exe untersuchen und könnte fündig werden.
Was wäre hier die beste Vorgehensweise in Bezug auf Sicherheit?
Der Quellcode soll vielleicht mal öffentlich gemacht werden, und dann sollte da ja eigentlich auch gar nix mehr im Quellcode zu finden sein oder?
Sollte ich die Kommunikation mit der DB aus dem Programm auslagern?
Eine .dll oder so?
Zuletzt geändert von hubblec4 am Sa 7. Jan 2023, 17:48, insgesamt 1-mal geändert.
-
- Beiträge: 845
- Registriert: Sa 12. Sep 2015, 12:10
- OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
- CPU-Target: Win 32/64, Linux64
- Wohnort: Wien
Re: Passwort im Programm verstecken
Nachdem ein Programm möglichst unabhängig von der angesprochenen Datenbank sein sollte was zb Zugangsdaten betrifft (ob andere DB-Typen möglich sein sollen sei mal dahingestellt) lege ich die Zugangsdaten in einer eigenen Textdatei beliebigen Formats (ich nutze einfach das INI-Format) ab die ich bei Programmstart bzw Verbindung zur DB einlese.
Kann man auch so gestalten dass man diese Datei irgendwie hübsch aus dem Programm aus anlegen bzw ändern kann etc.
Damit sind in deinem Sourcecode den du freigeben willst keinerlei Zugangsdaten zu irgendwelchen Datenbanken vorhanden und jeder User hat nur die Zugangsdaten zu "seiner" DB. Falls das deine Absicht ist kannst du hier aussteigen.
Bei erhöhtem Sicherheitsbedürfnis kannst du dafür sorgen dass die Datei mit den Zugangsdaten entsprechend verschlüsselt ist.
Den richtigen Forumsbeitrag hast du dafür ja schon gefunden.
Spontan fällt mir dazu Turbopower LockBox oder DCPcrypt aus dem OPM ein aber sicher gibt es auch noch andere Varianten und Komponenten die Verschlüsselung anbieten.
Kann man auch so gestalten dass man diese Datei irgendwie hübsch aus dem Programm aus anlegen bzw ändern kann etc.
Damit sind in deinem Sourcecode den du freigeben willst keinerlei Zugangsdaten zu irgendwelchen Datenbanken vorhanden und jeder User hat nur die Zugangsdaten zu "seiner" DB. Falls das deine Absicht ist kannst du hier aussteigen.
Bei erhöhtem Sicherheitsbedürfnis kannst du dafür sorgen dass die Datei mit den Zugangsdaten entsprechend verschlüsselt ist.
Den richtigen Forumsbeitrag hast du dafür ja schon gefunden.
Spontan fällt mir dazu Turbopower LockBox oder DCPcrypt aus dem OPM ein aber sicher gibt es auch noch andere Varianten und Komponenten die Verschlüsselung anbieten.
Re: Passwort im Programm verstecken
Was macht es denn damit?
Gibt es z.B. eine Benutzerverwaltung, oder loggt/liest das nur ein paar Daten?
Je nachdem könnte man ein Script (z.B. PHP) dazwischen schalten und so die (Haupt-)Passwörter auf dem Server lassen.
Das Script könnte dann auch vieles unterbinden/herausfiltern, was nicht erlaubt sein soll.
Ich finde, es kommt schon darauf an, was es werden soll.
MySQL Zugriff direkt für das Internet zu öffnen (auch Firewall) ist ja eh nicht die beste Idee afaik.
Re: Passwort im Programm verstecken
Das verstehe ich nun mal gar nicht.charlytango hat geschrieben: ↑Sa 3. Sep 2022, 09:14Nachdem ein Programm möglichst unabhängig von der angesprochenen Datenbank sein sollte was zb Zugangsdaten betrifft (ob andere DB-Typen möglich sein sollen sei mal dahingestellt) lege ich die Zugangsdaten in einer eigenen Textdatei beliebigen Formats (ich nutze einfach das INI-Format) ab die ich bei Programmstart bzw Verbindung zur DB einlese.
Kann man auch so gestalten dass man diese Datei irgendwie hübsch aus dem Programm aus anlegen bzw ändern kann etc.
Damit sind in deinem Sourcecode den du freigeben willst keinerlei Zugangsdaten zu irgendwelchen Datenbanken vorhanden und jeder User hat nur die Zugangsdaten zu "seiner" DB. Falls das deine Absicht ist kannst du hier aussteigen.
Wenn ich das Passwort für die DB in eine .INI schreibe dann kann ja gleich jeder User sofort in die INI schauen und hat das DB-Passwort.
Und wenn der User mal ausversehen die INI-Datei gelöscht hat wie soll diese wieder hergestellt werden? Dazu müsste dann ja auch alles im Code "vorbereitet" sein.
Auch das ist immer noch das selbe finde ich. Egal ob verschlüsselt oder nicht, die Zugangsdaten stehen in der Datei und man hat ja dann alle Zeit der Welt die Datei zu untersuchen.charlytango hat geschrieben: ↑Sa 3. Sep 2022, 09:14Bei erhöhtem Sicherheitsbedürfnis kannst du dafür sorgen dass die Datei mit den Zugangsdaten entsprechend verschlüsselt ist.
Re: Passwort im Programm verstecken
Hier der link zum Proggi.
https://gleitz.info/forum/index.php?thr ... /&pageNo=1
Es gibt im Proggi eine Kapiteldatenbank.
Ja es können Benutzer sich einen Acc anlegen und dann bissl down- und uploaden und editieren.
Es gibt nicht wirklich einen Server dahinter also so wie bei Webseiten. Ich habe nur die reine nackte SQL-DB.theo hat geschrieben: ↑Sa 3. Sep 2022, 09:54Je nachdem könnte man ein Script (z.B. PHP) dazwischen schalten und so die (Haupt-)Passwörter auf dem Server lassen.
Das Script könnte dann auch vieles unterbinden/herausfiltern, was nicht erlaubt sein soll.
Ich finde, es kommt schon darauf an, was es werden soll.
Von daher keine Ahnung wo man da ein php-script zwischen schieben sollte.
Mmmh. OK, aber wie soll man sowas generell lösen?
Re: Passwort im Programm verstecken
Naja, es kommt auf deine Sicherheitsansprüche an. Ich bin kein Experte dafür.
Wenn es dir reicht, dein Passwort "ein bisschen" zu verschlüsseln, kannst du diesen Weg so gehen.
Wenn es sicherer sein soll, würde ich schauen, dass der Server möglichst wenig überhaupt zulässt.
Also ein Grossteil der Logik auf den Server verlegen und nur noch die nötigen Schnittstellen/Operationen zulassen.
Das kann bis zu einem Webservice gehen.
(Wo MySQL ist, ist meistens auch ein Apache und PHP. )
Wie gesagt, ich bin kein Experte dafür, vielleicht kommen noch kompetentere Vorschläge.
Wenn es dir reicht, dein Passwort "ein bisschen" zu verschlüsseln, kannst du diesen Weg so gehen.
Wenn es sicherer sein soll, würde ich schauen, dass der Server möglichst wenig überhaupt zulässt.
Also ein Grossteil der Logik auf den Server verlegen und nur noch die nötigen Schnittstellen/Operationen zulassen.
Das kann bis zu einem Webservice gehen.
(Wo MySQL ist, ist meistens auch ein Apache und PHP. )
Wie gesagt, ich bin kein Experte dafür, vielleicht kommen noch kompetentere Vorschläge.
Re: Passwort im Programm verstecken
Mit dem Webzeugs steh ich bissl auf Kriegsfuss
und wie schon gesagt, es gibt auch keinen Server oder sowas, nur die reine nackte SQL-DB.
Meine Idee(n) war bis jetzt:
(1)
Ich hinterlege das PW schon in der Proggi.exe aber nicht mehr als hardcode, sondern als ultrakomplizierte Funktion, so dass man dann beim betrachten der Datei in einem Editor keinen "Text" mehr findet.
(2)
Ich bastel eine .dll zusammen welche mir das PW wie in (1) beschrieben erstellt.
Der Quellcode dieser .dll würde dann nicht veröffentlich werden.
und wie schon gesagt, es gibt auch keinen Server oder sowas, nur die reine nackte SQL-DB.
Meine Idee(n) war bis jetzt:
(1)
Ich hinterlege das PW schon in der Proggi.exe aber nicht mehr als hardcode, sondern als ultrakomplizierte Funktion, so dass man dann beim betrachten der Datei in einem Editor keinen "Text" mehr findet.
(2)
Ich bastel eine .dll zusammen welche mir das PW wie in (1) beschrieben erstellt.
Der Quellcode dieser .dll würde dann nicht veröffentlich werden.
Re: Passwort im Programm verstecken
Ich habe auf meinem Rechner ein Prog, wo die Passwörter in Inifiles stehen.
Damit man die nicht einfach ohne weiteres "mitlesen" kann, habe ich sie leicht verschlüsselt.
Das geht z.B. so:
Ist natürlich kein Fort Knox, aber etwas besser als Klartext.
D.h. so bekommt niemand "zufällig" das Passwort mit.
Wenn jemand mit "krimineller Energie" rangeht, wird es sowieso schwieriger.
Damit man die nicht einfach ohne weiteres "mitlesen" kann, habe ich sie leicht verschlüsselt.
Das geht z.B. so:
Code: Alles auswählen
uses base64;
const
XKey = 'Any?os898';
PassWort = 'JhhTAxwYf1czGxQ=';
function XORCrypt(Data, Key: string): string;
var
KeyLen: integer;
i: integer;
begin
KeyLen := Length(Key);
for i := 1 to Length(Data) do
Data[i] := Chr(Ord(Data[i]) xor Ord(Key[(i mod KeyLen) + 1]));
Result := Data;
end;
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
//Passwort verschlüsseln: EncodeStringBase64(XORCrypt('Irgend Ein PassWort', XKey));
ShowMessage(XORCrypt(DecodeStringBase64(PassWort), XKey));
end;
D.h. so bekommt niemand "zufällig" das Passwort mit.
Wenn jemand mit "krimineller Energie" rangeht, wird es sowieso schwieriger.
Re: Passwort im Programm verstecken
ja das mit der "leichten" verschlüsselung ist machbar,
aber ich möchte auf keinen Fall das das DB-PW in eine INI kommt. Damit wäre es ja noch leichter zu finden.
So eine INI doppel-klickt man und kann sie sich anschauen.
Eine .exe Datei muss man schon anders als per doppelklick laden um sie anzuschauen.
Und es geht auch nicht um die PWs von den Benutzern, diese kann der Benutzer in der INI hinterlegen lassen um sie nicht dauernd eingeben zu müssen,
ABER eben nicht das DB-PW, das sollte wenns geht nirgends stehen....
klar, irgendwo muss es stehen, denn die SQL-Komponente die sich mit der DB verbindet brauch es ja nun mal.
aber ich möchte auf keinen Fall das das DB-PW in eine INI kommt. Damit wäre es ja noch leichter zu finden.
So eine INI doppel-klickt man und kann sie sich anschauen.
Eine .exe Datei muss man schon anders als per doppelklick laden um sie anzuschauen.
Und es geht auch nicht um die PWs von den Benutzern, diese kann der Benutzer in der INI hinterlegen lassen um sie nicht dauernd eingeben zu müssen,
ABER eben nicht das DB-PW, das sollte wenns geht nirgends stehen....
klar, irgendwo muss es stehen, denn die SQL-Komponente die sich mit der DB verbindet brauch es ja nun mal.
Re: Passwort im Programm verstecken
Das Beispiel oben hat ja mit Inifiles nichts zu tun. Das PW steht ja in der const.
Re: Passwort im Programm verstecken
Jo und das ist ganz besonders schlimm
Ich habe mein PW sogar in drei Teile zerstückelt, alles als "const" und das ergebnis:
Öffne die .exe Datei in Notepad++ und liest direkt in Klartext das komplette PW.
Re: Passwort im Programm verstecken
Aber es ist in der Const ja verschlüsselt!
Verstehst du nicht?
Lass das doch mal laufen, dann siehst du, was dort wirklich steht.
Verstehst du nicht?
Lass das doch mal laufen, dann siehst du, was dort wirklich steht.
Re: Passwort im Programm verstecken
Naja, verstehen tu ich es schon. Man kann dann halt ein verschlüsseltes PW lesen.
Klar weis man nun nicht genau wie das eigentliche PW ist.
aber man kann schon mal direkt aus der .exe Datei das verschlüsselte PW auslesen ohne großen aufwand.
Klar weis man nun nicht genau wie das eigentliche PW ist.
aber man kann schon mal direkt aus der .exe Datei das verschlüsselte PW auslesen ohne großen aufwand.
Zuletzt geändert von hubblec4 am Sa 3. Sep 2022, 13:39, insgesamt 1-mal geändert.
Re: Passwort im Programm verstecken
Ja und?
Du kannst es ja zusätzlich noch zerstückeln, wenn du möchtest.
Du kannst es ja zusätzlich noch zerstückeln, wenn du möchtest.
Re: Passwort im Programm verstecken
das Zerstückeln bringt nix
nun steht in der .exe 'abxy';
Code: Alles auswählen
const
PW1 = 'ab';
PW2 = 'xy';
DecodePW(PW1 + PW2);