# Wo Passwörter speichern



## Helgon (22. Dez 2011)

Hey, hab letztens in nem Thread hier gelesen, dass es nicht sinvoll ist Passwörter irgendwo im Code stehen zu haben.
Wenn ich jetzt aber ein Programm hab das auf ne MySQL DB zugreifen soll, wo soll ich denn dann bitte die    Daten speichern?
Irgend ne externe Datei wie mans in PHP oft mit ini.php z.B. auslagert oder wie genau? Aber PHP ist ja eh komplett Serverseitig, deswegen kommt da unter normalen Umständen ja eh keiner dran.

Würd mich echt freuen wenn ihr mich erleuchtet, wie man mit sensiblen Daten in solchen Fällen umgeht/das handhabt.

Grüße


----------



## pro2 (22. Dez 2011)

Zwei einfache alternativ Vorschläge: Beim Abrufen der Daten erst nach dem Namen und Passwort fragen. Oder: Extra Benutzer in der Datenbank ohne Passwort anlegen, die nur Rechte zum Abrufen der Daten x erhalten.


----------



## Andgalf (22. Dez 2011)

Ich nehme an du meinst die Verbindungsdaten zur Datenbank.

Wenn du eine Web-Anwendung hast, sollten solche dateien innerhalb des WEB-INF Ordners liegen. Der ist von außen nicht erreichbar.


----------



## Helgon (22. Dez 2011)

@pro2
Da soll und da kennt aber auch niemand die Daten (PW, Benutzer etc)
Da soll nicht nur gelesen sondern auch geschrieben werden

@Andgalf
Ne sagen wir ne normale Desktop Applikation wo irgendwas eingetragen wird und das in eine im Internet liegende MySQL DB geschrieben werden soll


----------



## Andgalf (22. Dez 2011)

Helgon hat gesagt.:


> @Andgalf
> Ne sagen wir ne normale Desktop Applikation wo irgendwas eingetragen wird und das in eine im Internet liegende MySQL DB geschrieben werden soll



Wenn Du da verhindern willt, das der PC-User das Datenbank passwort liest ... würde ich das wahrscheinlich verschlüsseln .... aber ob das wirklich ne gute Idee ist müsste ich auch erstmal recherchieren ... sorry


----------



## TheDarkRose (22. Dez 2011)

Helgon hat gesagt.:


> Ne sagen wir ne normale Desktop Applikation wo irgendwas eingetragen wird und das in eine im Internet liegende MySQL DB geschrieben werden soll



Da gehört eine Webservice Schicht dazwischen!


----------



## Helgon (22. Dez 2011)

Das ist ja gerade die Sache, die ich gelesen hab, dass ja im Endeffekt alles "entschlüsselt" werden kann und wenn ich bspw md5 verschlüssele oder sha1 bringts mir ja nix weil das pw in der db nicht md5 oder sha1 ist, dementsprechend müsste ich was eigenes basteln, aber wenn ichs encoden kann, stehts ja auch wieder im code, also +- null ergebniss


----------



## Andgalf (22. Dez 2011)

TheDarkRose hat gesagt.:


> Da gehört eine Webservice Schicht dazwischen!



Wie wäre es damit? Klingt auf den ersten Blick für mich vernünftig


----------



## pro2 (22. Dez 2011)

Helgon hat gesagt.:


> Da soll nicht nur gelesen sondern auch geschrieben werden



Da kann man natürlich auch Schreibrechte geben. Es geht halt nur darum, dass du z.B. nicht den Admin Acc verwendest, wo es alle Rechte gibt. s. MySQL :: MySQL 5.1 Reference Manual :: 12.7.1.3 GRANT Syntax


----------



## Helgon (22. Dez 2011)

TheDarkRose hat gesagt.:


> Da gehört eine Webservice Schicht dazwischen!



gar nicht gesehn die Antwort.

Habs gegoogelt und ein 5Schchten Modell gefunden, dass mir aber nicht viel sagt. Kannste das in paar kurzen Worten vllt erläutern?

Grüße.


----------



## Andgalf (22. Dez 2011)

Helgon hat gesagt.:


> gar nicht gesehn die Antwort.
> 
> Habs gegoogelt und ein 5Schchten Modell gefunden, dass mir aber nicht viel sagt. Kannste das in paar kurzen Worten vllt erläutern?
> 
> Grüße.



Das google Buzzword dafür ist nicht Schicht sondern Webservice


----------



## Helgon (22. Dez 2011)

Eben genau das gemacht aber was ganz anderes bekommen  vllt vertippt hahaha 

Naja, werd mich mal einlesen, danke für die Tipps


----------



## irgendjemand (23. Dez 2011)

Helgon hat gesagt.:


> ... bspw md5 verschlüssele oder sha1 ...



aua aua aua ...

umd das gleich aus dem weg zu räumen : MD5 und SHA sind HASH algorithmen ... das hat NICHTS mit verschlüsselung zu tun ... sondern höchstens mit cryptografischer sicherheit ...

anmerkung : SHA-1 sollte auch nicht mehr verwendet werden sondern mindestens ein hash der SHA-2 familie *SHA256 , SHA384 , SHA512* ... da es gegen SHA-1 bereits erfolgreiche angriffs-möglichkeiten gibt ...

wenn du das ganze mit MySQL machst hast du einen vorteil : du brauchst nicht mal unbedingt ein passwort ...
MySQL unterstützt zur authentifizierung auch ein sog. Client-Zertifikat ... welches das passwort ersetzt ...
problem natürlich das du dann dieses wiederum mit deiner app ausliefern müsstest ... was im endeffekt aufs selbe hinaus läuft

schön das du dir wenigstens die anderen threads zu diesem thema durchgelesen hast ...

aber : wie auch dem anderen user empfehle ich *und wie du siehst die anderen auch* eine webservice-schicht ... auf basis von PHP oder JSP

da du dich scheinbar mit PHP auskennst verwende dieses ...

ziel ist es ein *bzw zwei* php-script zu haben welches daten vom client entgegen nimmt ... diese daten auf gültigkeit prüft ... und dann erst in die DB einträgt ... und natürlich die daten aus der DB auch zur verfügung stellt ...
wie an anderer stelle schon mal erwähnt ist es einfacher einen webservice gegen manipulation zu sichern als ein ganzen server gegen missbrauch oder sogar übernahme ...


----------



## Empire Phoenix (23. Dez 2011)

Webservice, db anfrage(also logicobject nicht als query!) an webservce schicken. Webservice hat logindaten loggt ein, wandelt das in en gültiges query um, und schickt antwort zurück.

Könnte man zb mit gwt amchen. (oder einem eigenen kleinen Server programm, so dass daraus ein client server datenbank modell wird . Also ein klassisches 3trier)


----------



## Jvooy (23. Dez 2011)

Hier eine Methode um wirklich "sichere" Passwörter zu haben(in ein Hashcode umwandeln)
Damit kannst du die Passwörter einfach auf einen Server legen und abrufen. Zusatzsicherungen gibt es natürlich auch noch.



MD5-Hash-Generator: Eine Zeichenkette per MD5-Hash verschlüsseln

und dann speichern. Wenn du das getan hast, kann man es nicht wieder "zurück wandeln".
Daher musst du jetzt zum überprüfen, ob das Passwort richtig ist, die Eingabe des Users in einen Hashcode umwandeln und die "Strings" vergleichen.

Dafür sind deine Passwörter sicherer.


Gruß


----------



## tfa (23. Dez 2011)

> Wenn du das getan hast, kann man es nicht wieder "zurück wandeln".



Das ist ja gut und richtig, nur nützt das alles nichts, wenn man sich mit Passwort an eine MySQL-DB anmelden will. Ich glaube, darum ging es.


----------



## Helgon (23. Dez 2011)

Danke für die paar Antworten.

Hatte mir das dann auch wies "irgendjemand" erwähnt hatte überlegt. 

Aber dann hat mich das ein wenig iritiert 



> Webservice, db anfrage(also logicobject nicht als query!) an webservce schicken. Webservice hat logindaten loggt ein, wandelt das in en gültiges query um, und schickt antwort zurück.



Ich hätte es (nur Gedankenspiel) so gemacht, dass ich sagen wir eine .php hab die eben nen searchpart hat (glaub so nennt sich das doch? die Parameter die man mit der URL mitgibt index.php?text=blablabla <--) und das PHP Skript schreibt dann eben in die DB (natürlich injection sicher haha), aber dann hat mich das was Empire Phönix geschrieben hat ein wenig verwirrt. 

Das ist ja doch eigentlich einfach ein query was ich vor habe. Was hab ich unter logicobject zu verstehn?

Grüße


----------



## irgendjemand (23. Dez 2011)

Jvooy hat gesagt.:


> Hier eine Methode um wirklich "sichere" Passwörter zu haben(in ein Hashcode umwandeln)
> Damit kannst du die Passwörter einfach auf einen Server legen und abrufen. Zusatzsicherungen gibt es natürlich auch noch.
> 
> 
> ...



ich glaube du hast dir weder meinen post durch gelesen ... noch den sinn dieses threads verstanden ... geschweigedenn ahnung von dem was du da geschrieben hast ...

um es auch dir noch ein mal wirklich idioten sicher zu sagen

HASH-algos haben NICHTS ... aber auch wirklich REIN GARNICHTS mit "VERSCHLÜSSELUNG" zu tun ...

DENN : eine VERSCHLÜSSELUNG kann man IMMER umkehren *wie ist hier nebensächlich* ... ein HASH ist eine einweg-funktion ... heißt : du kannst von beliebigen input den HASH berechnen ... aber aus dem HASH keinen quell-input da alleine die tatsache das ein hash eine bestimmte länge hat es mehr als 1 möglichen input je möglichem hash-output gibt ...

HASH hat allerhöchstens etwas mit "cryptografischer Sicherheit" zu tun ...

außerdem : das ziel war es ein zugangs-passwort für einen MySQL-Datenbank-Server sicher abzulegen ... und das geht mit einem HASH NICHT ! ... denn der mysql-server erwartet das der user der sich verbinden will über das passwort in PLAIN verfügt ... anderst ist eine authentifizierung via passwort ausgeschlossen ...

was auch noch sehr wichtig wäre : MD5 ist *da es nur 128bit hat* in der heutigen zeit zu unsicher ... genau wie SHA-0/1 ...
wenn man schon mit HASH-werten spielt sollte man MINDESTENS SHA-256 oder höher verwenden um noch eine einigermaßen große sicherheit zu haben *mitlerweile wird SHA-512 empfohlen* ...


von daher : wenn du das nächste mal einen so qualifizierten post los lassen willst ... dann lies dir vorher bitte ALLE posts durch und versuche diese zu verstehen ... bevor du dich selbst zum deppen machst und voll am thema vorbei schießt ...


----------

