PASSWORD

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
indi
User
Beiträge: 4
Registriert: Sonntag 26. Oktober 2008, 21:08

hi ich bin neu hir und habe gleich mal ne frage.
wie kann ich eine Passwordabfrage programmieren, mit mehreren benutzern wo jeder natürlich ein eigenes Passwort hat.


danke im voraus

gruß
indi
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Bitte formuliere genauer, was du möchtest.

Passwordabfrage: auf der Konsole, Webinterface, RPC...
Mit mehreren Benutzern: Benuzter die du verwaltest, Systembenutzer, Benutzer eines anderen Programmes...
indi
User
Beiträge: 4
Registriert: Sonntag 26. Oktober 2008, 21:08

hi
ich will die passwort abfrage für ein programm erstellen habe auch schon ein par codes aus dem internet aber immer wenn ich mehr als nur zahlen als passwort nehme bringt er mir den fehler, dass das Passwort nicht definiert sei. ich hoffe ihr habt ein par vorschlägefür so eine Passwort abfrage.

danke im voraus

gruß
indi
BlackJack

Meine Glaskugel verrät mir, dass Du `input()` anstelle von `raw_input()` verwendest. Bei `input()` kann man Python-Quelltext eingeben, der dann ausgewertet wird. Wenn Du da also einfach ein ein paar Buchstaben eingibst, dann sucht Python nach einem Namen um dann den daran gebundenen Wert zu verwenden. Nach der ``In``-Zeile steht immer das was ich eingegeben habe:

Code: Alles auswählen

In [15]: a = 42

In [16]: input()
23
Out[16]: 23

In [17]: input()
a
Out[17]: 42

In [18]: input()
a + 23
Out[18]: 65

In [19]: input()
z
---------------------------------------------------------------------------
<type 'exceptions.NameError'>             Traceback (most recent call last)

/home/bj/<ipython console> in <module>()

/home/bj/<string> in <module>()

<type 'exceptions.NameError'>: name 'z' is not defined

In [20]: input()
'hallo'
Out[20]: 'hallo'
indi
User
Beiträge: 4
Registriert: Sonntag 26. Oktober 2008, 21:08

hi
damit lagst du schon richtig. ich habe im internet mal nachgeschaut

secret=45155A
guess=0

while guess !=secret:

guess=input("NAME: ")

if guess==secret:
print"on"

else:
print'off'

print"on"


so soll nach der anleitung im Internet die passwort abfrage sein.
er bringt aber immer den fehler das 45155A nicht definiert ist.
meine Frage ist ob das überhaupt für eine Passwortabfrage mit mehreren Benutzern ist wen ja wie kann ich den fehler beheben.
Ansonsten freue ich mich über weitere beispiele.

dank im voraus
gruß
indi
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Ich glaube, du solltest erst mal das [wiki=Tutorial]Tutorial[/wiki] durcharbeiten, anstatt "irgend etwas aus dem Internet" zu übernehmen, das du nicht verstehst.
indi
User
Beiträge: 4
Registriert: Sonntag 26. Oktober 2008, 21:08

danke für den tipp
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Für Code gibt es das `code'-Tag ;)
Aber das was du da gepostet hast, solltest du am besten gleich komplett löschen ...
Für mehrere Benutzer ist ein Dictionary in der Form { User : Password } die naheliegenste Idee - wenn man "deinem" Ansatz folgt. Allerdings ist es eine ganz schlechte Idee das Passwort im Klartext zu speichern ... und wenn du dir mal eine .pyc angeschaut hast, dann wirst du sehn, dass das nich viel mehr als eine zerhackte .py is ;)

Passwort hashen und Hashwerte vergleichen ;)
Oder auch nach existenten Lösungen googlen..
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

cofi hat geschrieben:Allerdings ist es eine ganz schlechte Idee das Passwort im Klartext zu speichern ...
Auf die Gefahr hin, Offtopic zu werden: ich habe den Eindruck, dass das stark überbewertet ist, da auch die Hashes nicht einsehbar sein dürfen (stichwort /etc/shadow).
Es ist sicher keine schlechte Praxis, passwörter (gesalzen) zu hashen, aber für so notwendig, wie es gerne dargestellt wird, halte ich es auch wieder nicht. Korrigiert mich, wenn ich Fälle übersehe, in denen es mehr als nur ein (schwacher) Schutz vor der Versuchung für den Admin ist.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

keppla hat geschrieben:Korrigiert mich, wenn ich Fälle übersehe, in denen es mehr als nur ein (schwacher) Schutz vor der Versuchung für den Admin ist.
Gegen einen böswilligen Admin ist es gar kein Schutz, der kann auch SSH oder passwd modifizieren und dein Passwort bekommen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Gegen einen böswilligen Admin ist es gar kein Schutz, der kann auch SSH oder passwd modifizieren und dein Passwort bekommen.
Ich sprach auch von einem "Versuchten" Admin, also einem, der Prinzipiell gutwillig ist, aber, wenn er erstmal gesehen hat, wer was für ein Password hat, es nicht mehr vergessen kann.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dann gibt es noch das Problem der Malware, die ggf. Passwörter abgrast und wenn diese im Klartext stehen es noch blöder ist. Außerdem wenn jemand das Gerät auf dem die Passwörter sind, was dann?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

@keppla: Das ist doch gerade der Sinn von Hashes, dass sie sich nicht zurückrechnen lassen?! Das heißt, wenn ich dir nen sha224-Hash von meinem Passwort gebe, kannst du nicht auf das Originalpasswort kommen, es sei denn
* Du verwendest eine Wörtbuchattacke, wenn ich denn Wörter in meinem Passwort habe
* Du hast ein paar Milliarden Jahre Zeit für nen Brute-Force-Angriff.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dauerbaustelle hat geschrieben:@keppla: Das ist doch gerade der Sinn von Hashes, dass sie sich nicht zurückrechnen lassen?!
...Rainbow Table...
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
farid
User
Beiträge: 95
Registriert: Mittwoch 8. Oktober 2008, 15:37

Leonidas hat geschrieben:Gegen einen böswilligen Admin ist es gar kein Schutz, der kann auch SSH oder passwd modifizieren und dein Passwort bekommen.
Richtig. Aber das typische Risiko von Klartext-Passwoertern in Programmen ist oft ein anderes als der malizioese Admin.

Was ist z.B. mit einem CGI, bei dem im Rahmen von Umkonfigurationen des Apache ploetzlich (unbeabsichtigt) der Quellcode angezeigt wird? Oder was ist wenn man dort z.B. vergessen hat, cgitb auf ein Logfile umzulenken und es ein Traceback mit PW-Anzeige gibt? Dann ist das interne Passwort publik, und es waere besser gewesen, wenn's nur der Hash gewesen waere (vorausgesetzt, das Passwort war stark).
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Leonidas hat geschrieben:
Dauerbaustelle hat geschrieben:@keppla: Das ist doch gerade der Sinn von Hashes, dass sie sich nicht zurückrechnen lassen?!
...Rainbow Table...
...Salt...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

EyDu hat geschrieben:
Leonidas hat geschrieben:
Dauerbaustelle hat geschrieben:@keppla: Das ist doch gerade der Sinn von Hashes, dass sie sich nicht zurückrechnen lassen?!
...Rainbow Table...
...Salt...
Das steht schon im Rainbow-Table Artikel. Dauerbaustelle sprach von Hashes und die sind so zwar nicht zurückrechenbar, aber dennoch nicht per-se sicher.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

@Leonidas: Schon klar. MD5 gilt mittlerweile ja auch als unsicher (Kollisionsgefahr etc).

Wenn man es aber etwa nach dem folgenden Verfahren macht, dürfte es "sicher" sein:

Code: Alles auswählen

In [8]: salt = "u7h&5§"
In [9]: password = "Hall0Dies1stM3inPassw@rtMit1337-5p3@k"
In [10]: import hashlib
In [11]: hash = hashlib.sha512(password+salt)
In [12]: hash.hexdigest()
Out[12]:
'e5754401ce0c42dc7fbf1ce03a7f2fc0b5cadb22d32e73a7bdd570ec9e70461e2cf05affd5b06015c1440c3681802dc3d71ff1992ab34464a3c486c1dcbba75c'
Natürlich ist die Sicherheit eines Hashes wie immer vom Passwort abhängig, das heißt, "Butterbrot" hab ich wohl in fünf Minuten raus...
lunar

Leonidas hat geschrieben:
Dauerbaustelle hat geschrieben:@keppla: Das ist doch gerade der Sinn von Hashes, dass sie sich nicht zurückrechnen lassen?!
...Rainbow Table...
Die trotzdem berechnet werden müssen, was nicht trivial ist. Frei verfügbare Tabellen gibt es zwar, die kommen aber kaum über zehnstellige Passwörter ohne Sonderzeichen hinaus.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Jedenfalls ist man mit einem guten und langen Salt sowie einer vernünftigen Hash-Funktion schon mal ausreichend abgesichert. Mit recht geringem Aufwand hat man dann die von farid genannten, sehr realen Probleme erschlagen. Darüber hinaus gehende Sicherheitsvorkehrungen würde ich eher an anderen Stellen (Zugang zum Host, zur Datenbank usw.) ansetzen.
Antworten