Aktuelle Zeit: Do 23. Nov 2017, 23:01

 [Zurück]   Alle Zeiten sind UTC + 1 Stunde


 Menü 
 Anmelden 
Benutzername:


Passwort:

>> Passwort vergessen

Mich bei jedem Besuch automatisch anmelden

 Links
Energiespartipps
 Statistiken 
Beiträge insgesamt: 5386
Themen insgesamt: 830
Dateianhänge: 40

Themen pro Tag: 0
Beiträge pro Tag: 2
Benutzer pro Tag: 0
Themen pro Benutzer: 3
Beiträge pro Benutzer: 18
Beiträge pro Thema: 6

Mitglieder insgesamt: 299
Unser neuestes Mitglied: beetlejuice


 Seite 1 von 1
Bookmark and Share  
Autor Deine Nachricht
Profi User
Echtheitsüberprüfung
Beitrag Nummer:#1  BeitragVerfasst: Do 8. Apr 2010, 20:56  BeitragZeige einzelnen Beitrag 
(Threadstarter)
Profi User
Benutzeravatar

Registriert: Mo 10. Aug 2009, 15:28
Beiträge: 653
Bilder: 7
Themen: 83
Wohnort: Pirmasens
Danke abgegeben: 2 mal
Danke erhalten: 1 mal
Hallöle...
das dreht sich nun um eine Sicherheits relevante Sache.

Ich möchte später hinaus eine API in mein CMS einbindung.
Diesbezüglich möchte ich die Anmeldung bei der API über 2 Wege nur zulassen:

API-ID (wird zufällig generiert)
API-Passwort (muss festgelegt werden)

Nun aber folgendes:
Man könnte ja mit der Zufallsfunktion von PHP verschiedene Zahlen/Buchstaben wählen lassen und anzeigen lassen.
Die sollen dann aber gespeichert werden. Nun soll wenn Programm xyz auf die api.php zugreift der gesendete Code mit dem gespeicherten verglichen werden, gleicheres mit dem passwort.
Sollte eines von beiden nicht stimmen soll die Verbindung nicht möglich sein.

Zudem möchte ich die Online-Version ein wenig anders aktuell schützen.
Mir geht es nämlich aufen Sender das selbst wenn ich über PHP dateien daraus abrufe htaccess einspringt.

Daher möchte ich das gleiche mit der Seite aktuell machen.
Wer in den ordner wechselt wird zuerst auf die index.php ja geleitet. Dort soll er nu einen (von mir vorher generierten) String eingeben (zB. 225267436). Dieser wird dann mit der Datenbank abgelichen.
Sollte er stimmen wird die index2.php geladen (die soll übrigens nur aufgehene wenn die index.php die IP freigibt).
So nu soll der liebe user für schlappe 12h zugriff haben danach issen neuer code notwendig.
Das heißt man müsste ur 12h lang die IP + den Code speichern.
Nach den 12h soll sowohl die IP als auch der code gelöscht werden.

Hoffe doch man versteht was ich vorhabe ^^'




Bild

SirZimts PC
Offline
 Profil Persönliches Album  
Up 
Bot
Bot
 
Online  
PC Kenner
Re: Echtheitsüberprüfung
Beitrag Nummer:#2  BeitragVerfasst: Do 8. Apr 2010, 21:47  BeitragZeige einzelnen Beitrag 
PC Kenner

Registriert: Di 8. Sep 2009, 13:50
Beiträge: 304
Themen: 9
Danke abgegeben: 1 mal
Danke erhalten: 0 mal
Moin,

SirZimt hat geschrieben:
Daher möchte ich das gleiche mit der Seite aktuell machen.
Wer in den ordner wechselt wird zuerst auf die index.php ja geleitet. Dort soll er nu einen (von mir vorher generierten) String eingeben (zB. 225267436). Dieser wird dann mit der Datenbank abgelichen.
Sollte er stimmen wird die index2.php geladen (die soll übrigens nur aufgehene wenn die index.php die IP freigibt).
So nu soll der liebe user für schlappe 12h zugriff haben danach issen neuer code notwendig.
Das heißt man müsste ur 12h lang die IP + den Code speichern.
Nach den 12h soll sowohl die IP als auch der code gelöscht werden.


Wenn der richtige String eingegeben wurde (wird ja, wie du schon geschrieben hast, mit der DB verglichen) wird der Benutzer auf die index2.php weitergeleitet. Das ist ja kein Problem.
Vorher wird aber nach der Überprüfung des Strings die BenutzerIP + der aktuelle Timestamp in der DB abgelegt. In der index2.php wird dann gecheckt, ob die BenutzerIP schon abgespeichert ist. Außerdem wird kontrolliert, ob der Timestamp noch weniger als 12 Stunden her ist. Der Eintrag wird ansonsten gelöscht. Sollte eine der beiden Bedigungen nicht erfüllt sein, wird der Benutzer auf die index.php weitergeleitet.

Zitat:
Man könnte ja mit der Zufallsfunktion von PHP verschiedene Zahlen/Buchstaben wählen lassen und anzeigen lassen.
Die sollen dann aber gespeichert werden. Nun soll wenn Programm xyz auf die api.php zugreift der gesendete Code mit dem gespeicherten verglichen werden, gleicheres mit dem passwort.
Sollte eines von beiden nicht stimmen soll die Verbindung nicht möglich sein.

Wo ist da das Problem?




Skript ist neutrum. Also das/dieses Skript!
nicht der Skript!

Bild
Offline
 Profil  
Up 
Re: Echtheitsüberprüfung
Beitrag Nummer:#3  BeitragVerfasst: Fr 9. Apr 2010, 03:34  BeitragZeige einzelnen Beitrag 
Bei der API könnte man die Passwort übertragung nach dem Challenge/Response prinzip machen.
Da gibt es zum Beispiel DIGEST-MD5. Das ist jetzt für dich vielleicht ne ecke kompliziert darum mach ich es mal simpel:

Szenario:
- Am Server ist ein Passwort und Benutzername gespeichert über das man zugriff auf die API hat.
- Ein Programm, welches im Besitz des Benutzernamens und des Passwortes ist (durch Benutzer eingegebekonfiguriert) möchte auf die API zugreifen.

Da HTTP Zustandslos ist, folgt auf jeder Anfrage immer eine Antwort, und es wird dann eine "neue unabhängige" Verbindung benötigt.
Der Ablauf erfolgt dann in etwa so:
  • 1)
  • Client: sendet eine Anfrage nach einer sogenannten "Challenge"
  • Server: antwortet mit einer "Challenge" die der Client angefragt hat, die einen Zufallsgenerierten String enthält und auch ein paar Cookies (oder etwas anderes mit dem der Client identifiziert werden kann), die ebenfalls zufällig generiert sind. Der Client muss diese Cookies dann natürlich bei jeder folgenden Anfrage mitsenden.
  • 2)
  • Client: erstellt einen Hash-wert aus der Kombination: md5(passwort.username.zufallsstring.eigenerzufallsstring) - wobei der "zufallsstring" der vom Server generierte ist. Und "eigenerzufallsstring" ist ein vom Client generierter Zufallsstring.
    Das was der Client dann als "Challenge-Response" zurück zum server sendet ist nur der generierte Hash-wert und der eigene Zufallsstring. (und natürlich die Cookies, separat vom rest).
  • Server: Der Server macht dann auf seiner Seite genau das selbe. Er nimmt das passwort und den usernamen, zusammen mit dem im vorherigen Abschnitt erstellten zufallsstring (den er irgendwo abgelegt hat) und den jetzt vom client gesendeten "eigenerzufallsstring" und erstellt den Hash-wert auf die gleiche Art und weise. Stimmen beide hash-werte überein, die vom Client gesendete und die vom Server eben erstellte, dann hat der Client zugriff zur Api.
    Das was der Server dann zurücksendet ist natürlich eine erfolgreiche Meldung, wenn alles geklappt hat, doer ein "403 unauthorized" oder so ;)

Das ganze Prinzip dient nur einem einzigen Zweck:
Damit das Passwort nicht im Klartext übertragen werden muss.

Die Zufallsstrings dienen als Salt. Auf diese Art und weise wird JEDESMAL ein anderer hash-wert übermittelt, wenn der Client sich einloggen will... selbst wenn man den übertragenen hash-wert irgendwie abfängt und ausliest, so kann man damit nichts anfangen, weil der für das nächste Login nicht mehr verwendet werden kann.
Das originale DIGEST-MD5 ist ein bisschen komplexer.

Wenn das Passwort mit md5 oder ähnlichem in der Datenbank abgelegt ist, ist das auch kein großes Problem, du musst dich quasi nur darauf einigen, dass der Hash dann bisschen anders auf der Client seite generiert wird z.b.: md5(md5(klartextpasswort).username.zufall1.zufall2)

und der server hat md5(klartextpasswort) ja schon, also muss er dort, wenn er das bereits gehashte passwort aus der datenbank nimmt: md5(hashedpasswort.username.zufall1.zufall2)

so ungefähr...

Falls du Fragen dazu hast, nur zu.

mfg Balmung



Balmungs PC
  
Up 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
 Seite 1 von 1
« Vorheriges Thema | Nächstes Thema »
Gehe zu:  

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.