Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Daedra22

Treue Seele

  • »Daedra22« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Osten

Beruf: Student Informationstechnik

  • Private Nachricht senden

1

09.09.2014, 20:48

Verschlüsselte/gehashte Passwörter in PHP Datenbank herauslesen und decodieren zum Login

Hallo liebe Community

Ich habe eine Joomla Vorlage für meine Webseite verwendet, die MySQL Datenbank ist extern erreichbar also ich komme an die Datensätze mit den richtigen Berechtigungen ran.
Wie ist es eig mit den Passwörtern in der Datenbank diese werden oft komplett verschlüsselt in der Datenbank abgespeichert niemals im Klartext, wo genau kann ich den Codierungsvorgang herauslesen, ich brauche ja die Passwörter wenn die Nutzer sich über meinen Client anmelden will, dabei sollen sie ja die gleichen Daten verwendet werden wie auf der Webseite, aber ich brauche ja den Decodierungsalgorithmus um die Passwörter abzugleichen, oder habe ich wieder einen Denkfehler ?
Who are you? - I am a game designer.
No you are not! - I am a game designer.
What kind of a designer ? - I am a game designer.
You mean you play games ? - I am a game designer.

2

09.09.2014, 21:25

Du benutzt keine Verschlüsselungsfunktion, sondern eine Hashfunktion mit Salt. Diese ist nicht umkehrbar. Aber wenn du vorne das selbe hineinschmeißt, kommt hinten das selbe wieder hinten raus. Das kannst du vergleichen.
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

Daedra22

Treue Seele

  • »Daedra22« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Osten

Beruf: Student Informationstechnik

  • Private Nachricht senden

3

09.09.2014, 21:38

ahhh stimmt ja ok sehr gut und die genaue Funktion in Java ?
Who are you? - I am a game designer.
No you are not! - I am a game designer.
What kind of a designer ? - I am a game designer.
You mean you play games ? - I am a game designer.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

09.09.2014, 21:57

die MySQL Datenbank ist extern erreichbar also ich komme an die Datensätze mit den richtigen Berechtigungen ran
Um Gottes Willen! Wieso das denn?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Daedra22

Treue Seele

  • »Daedra22« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Osten

Beruf: Student Informationstechnik

  • Private Nachricht senden

5

09.09.2014, 22:43

Ja ich versteh noch nicht ganz wie ich dieses 3 Schichten System realisieren soll, und die ganze Server Architektur ist mir sowieso komplett neu, deswegen versuch ich es erstmal mit dem externen Zugriff...
Who are you? - I am a game designer.
No you are not! - I am a game designer.
What kind of a designer ? - I am a game designer.
You mean you play games ? - I am a game designer.

MitgliedXYZ

Alter Hase

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

6

09.09.2014, 22:53

Ich hab mir vor kurzem dieses Buch ausgeliehen:
http://www.amazon.de/Professionell-entwi…isual+c%23+2012

Da geht es auch in einigen Kapitel um die richtige Softwarearchitektur und in welchen Schichten man solche Serveranwendungen aufbauen sollte, etc. Das würde dir bestimmt weiterhelfen.

Edit: Sehe gerade hier geht es um Php, aber einige Kapitel sind sehr allgemein gehalten, ansonsten vielleicht würde es bei deiner Cliententwicklung helfen.

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

7

10.09.2014, 07:37

Es wurde bereits in einem anderen Thread beschrieben, dass und warum du keinen externen Zugriff auf die Datenbank einbauen solltest. Es ist ein leichtes, die Netzwerkkommunikation mitzulesen oder den Java-Code zu dekompilieren. Darüber weiß man, auf welchen Server zugegriffen wird und mit welchen Logindaten der Benutzer zugreift. Nun kann man sich ein beliebiges Programm nehmen, mit dem man SQL-Datenbanken verwqaltten kann, um auf alle Daten der Datenbank zuzugreifen. Selbst wenn du alles verschlüsseln würdest, wäre es nur eine Frage der Zeit, bis jemand die richtigen Logindaten findet und Zugriff auf die Datenbank bekommt.
Würde jeder Benutzer Datenbankseitig seinen eigenen Benutzer haben, dessen Rechte entsprechend eingeschränkt sind, sähe das ein wenig anders aus, aber wirklich nur ein wenig. Die Tabellen, die nur von ihm genutzt bzw. nur von anderen genutzt werden könnten, wären kein Problem. Tabellen, auf die jeder Benutzer zugreifen kann oder können soll, könnten immernoch gänzlich bearbeitet werden, sodass der Benutzer bspw. immernoch die Benutzerinformationen aller anderen Benutzer sehen und bearbeiten kann. Weiterhin müsste für jeden Benutzer, der sich bei deinem Dienst anmeldet, ein Datenbankbenutzer angelegt werden. Nutzt man einen kostenlosen Anbieter, hat man i. d. R. eine Begrenzung der Datanbank-Benutzer.

Was du eher machen solltest, ist, wie schon oft genug beschrieben, den Client nur mit dem Server kommunizieren zu lassen, der wiederum Informationen persistent hinterlegen kann. Dem Client muss dabei egal sein, wie die Daten genau gespeichert werden, da er nur die Schnittstelle zum Server kennt. So kann der Server auf Änderungen der Datenstrukturen in der Datenbank eingehen, ohne dass der Client gänzlich zusammenbricht. Mal ganz abgesehen davon, dass jede Anfrage an den Server authentifiziert werden kann.

Wenn du schrittweise vorgehen willst, dann solltest du dich entweder erst um den Server kümmern, der die Daten richtig speichern und laden kann, oder erst um den Client, der Zufallsdaten, Mockupdaten o. ä. vom Server erhält. Solltest du mit dem Server anfangen (was ich wahrscheinlich machen würde), dann könntest du als Client den Webbrowser verwenden und vorerst alles als HTML zurückgeben.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Daedra22

Treue Seele

  • »Daedra22« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Osten

Beruf: Student Informationstechnik

  • Private Nachricht senden

8

11.09.2014, 22:06

Ok vielen Dank erstmal für die zahlreichen Tipps,
nun meine nächste Frage: Ich nutze ja Joomla die Passwörter sind gehasht in der Datenbank und besitzen einen Salt Wert, der wie ich verstanden hab zufällig generiert wurde und bei der Verschlüsselung half.
Wie kann ich in Java ein Passwort auf die gleiche Weise hashen ? Die Technik ist MD5 aber ich brauche doch den Salt Wert um es auf die gleiche Weise zu hashen und dann vergleichen zu können ?

Hashing ist mir komplett neu, hat einer ne schöne Funktionen die das macht, bzw. was hat es mit dem Salt-Wert auf sich ?

So sind die Passwörter in der Datenbank:
$2y$10$ApdT.mqDtJoT2PcCQSU2g.f5Q8XHgUEHjvCfGbiOPiM.duxE40iau
$2y$10$JSCO9KLWho5.S4QQlpToauPTYQPTcj6DWGGS9QaHygF20zyhbwfgW
$2y$10$5nK4TPA5Zfemrl9lrxofJevfiTyBl0/Q0tPK2IkoXt8p2XW1QUZNi
$2y$10$lE8tXWHM8lXVtOy5Rr4BaObrWikDz0Rp8S8Yz5kjvk3sejyrJzyCu
Who are you? - I am a game designer.
No you are not! - I am a game designer.
What kind of a designer ? - I am a game designer.
You mean you play games ? - I am a game designer.

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

9

11.09.2014, 22:14

Ein SALT ist dabei etwas, was nur du bzw. deine internen Vorgänge kennen, z.B. "FooBar". Dieser string wird an dein Passwort dran gehängt und mit verschlüsselt (oder verschlüsselt angehängt und nochmal verschlüsselt, wie man es mag).
Falls nun ein Brute-Force Angriff kommt und der Angreifer dank Wortbuch oder sonstwas eigentlich dein Passwort erraten würde (sagen wir es ist "Quatz"), dann stimmt der Hash den der Angreifer für "Quatz" errechnet aber nicht mit dem tatsächlichen Hash deines Passworts in der Datenbank überein, denn dank deines SALT's sieht der Hash völlig anders aus. Idealerweise besteht der SALT natürlich aus Alphanumerischen Zeichen.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Daedra22

Treue Seele

  • »Daedra22« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Osten

Beruf: Student Informationstechnik

  • Private Nachricht senden

10

11.09.2014, 22:16

Ah Ok und der Salt Wert ? Wird der in der Datenbank irgendwo gespeichert ? Oder ist der wirklich intern im Code ?
Who are you? - I am a game designer.
No you are not! - I am a game designer.
What kind of a designer ? - I am a game designer.
You mean you play games ? - I am a game designer.

Werbeanzeige