Login daten senden richtig machen

theplake

Erfahrenes Mitglied
Hi Leute

Ich habe ein Kassen programm programmiert welches mit einer mysql datenbank login daten und passwort überprüft.Ich benutze dafür den mysql connector.

So, da ein debugger ja c++ .net Quasi komplett auseinander nimmt und die sql "Befehle" in einem String (klartext) übertragen werden ist es für hacker ein leichtes alles rauszufinden.

Meine Frage ist jetzt wie könnte man so einen Login sicherer machen****

Ich wollte mir hier mal ein paar anregungen holen.
 
Du kannst das Passwort zum Beispiel als sha1 (oder eine andere Funktion) Hash speichern und dann mit dem Hash des eigegebenen Passworts vergleichen.
 
Hi,

grundsätzlich ist es fast immer möglich, ein Programm in seine Bestandteile zu zerlegen und die Strings darin zu extrahieren. Zum einen würde ich Passwörter weder in der Datenbank als Klartext speichern, noch in Klartext an die Datenbank schicken. Verwendet hierfür (wie vom Vor-Poster vorgeschlagen) eine Hashing Funktion.

Da sich dein Programm ja auch an der Datenbank anmelden muss, um überhaupt Abfragen schicken zu können, hat es ja auch Zugangsdaten. Diese kannst du nicht einfach hashen, weil ja der Server das Passwort dann nicht mehr kennt / prüfen kann.

Ich würde dir empfehlen, zum einen die Kommunikation komplett verschlüsselt zu machen (siehe SSL und TLS; MySQL kann das normalerweise) und zum anderen dein Programm vor der Auslieferung von Debugging-Symbolen zu befreien und anschließend durch einen Obfuskator laufen zu lassen.

Gruß
BK
 
Da sich dein Programm ja auch an der Datenbank anmelden muss, um überhaupt Abfragen schicken zu können, hat es ja auch Zugangsdaten. Diese kannst du nicht einfach hashen, weil ja der Server das Passwort dann nicht mehr kennt / prüfen kann.

Ist ja auch kein Problem, wenn der User sich mit diesen Daten ohne das Programm anmelden kann. Man muss einfach entsprechend die Benutzerreche anpassen, aber das ist meines Erachtens Grundvoraussetzung um überhaupt mit Sicherheit anzufangen.
 
Erstmal danke für die schnellen tipps.

Hi,

grundsätzlich ist es fast immer möglich, ein Programm in seine Bestandteile zu zerlegen und die Strings darin zu extrahieren. Zum einen würde ich Passwörter weder in der Datenbank als Klartext speichern, noch in Klartext an die Datenbank schicken. Verwendet hierfür (wie vom Vor-Poster vorgeschlagen) eine Hashing Funktion.
Also die passwörter werden natürlich nicht in Klartext gespeichert sondern in md5.Ich wandel den String mit dem Klartext PW(bzw. halt das was der user im terxtfeld eingibt) direkt über den MySQL command um.

Da sich dein Programm ja auch an der Datenbank anmelden muss, um überhaupt Abfragen schicken zu können, hat es ja auch Zugangsdaten. Diese kannst du nicht einfach hashen, weil ja der Server das Passwort dann nicht mehr kennt / prüfen kann.
Genau das meine ich.

Ich würde dir empfehlen, zum einen die Kommunikation komplett verschlüsselt zu machen (siehe SSL und TLS; MySQL kann das normalerweise) und zum anderen dein Programm vor der Auslieferung von Debugging-Symbolen zu befreien und anschließend durch einen Obfuskator laufen zu lassen.
Das werde ich mir auf jedenfall mal anschauen.

@Muepe
Ist ja auch kein Problem, wenn der User sich mit diesen Daten ohne das Programm anmelden kann. Man muss einfach entsprechend die Benutzerreche anpassen, aber das ist meines Erachtens Grundvoraussetzung um überhaupt mit Sicherheit anzufangen.

Das habe ich auch schon erledigt.

Mir gehts echt eigentlich nur darum diesen Username und PW um überhaupt auf die datenbank zu connecten sicher zu machen.
 
Mir gehts echt eigentlich nur darum diesen Username und PW um überhaupt auf die datenbank zu connecten sicher zu machen.

Mit welchem Grund denn? Macht es einen Unterschied ob der User über das Programm sich mit der Datenbank verbindet oder ob er es manuell macht? Der Benutzer sollte ja sowieso nur exakt genau die Berechtigungen haben, die er benötigt (Beispielsweise lediglich Lesezugriff auf die eine Logintabelle).
 
Vielleicht sollte im Vorfeld die Frage gestellt werden, ob es sich hier um eine dezentrale/ verteilte Architektur handelt. Liegt die MySql Datenbank auf der gleichen Maschine/ Kasse?
Ja:
Ich sehe keine Problem.

Nein:
Hier stellen sich dann weitere Fragen. Zum Beispiel: Wie wird kommuniziert - via WebService, Remoting oder gar direkt mit dem SQL Server via TCP/IP? Je nachdem kann man dann sagen ob es über SSL gesichert werden sollte. Oder ob sogar eine einfache Verschlüsselung wie schon angesprochen ausreicht.
 
Also der Mysql Server steht seperat in einem Rechenzentrum.
Es wird nur über das Programm mit der Datenbank kommuniziert.

Daher sollte eine Verschlüsselung reichen.
 

Neue Beiträge

Zurück