Seite 1 von 1

Passworteingabe/-überprüfung Online

Verfasst: Freitag 22. Juni 2012, 20:24
von dodo
Ich schreib zur Zeit 'n Programm fürn größeres Projekt, und ich dachte, dass dieser Code für viele Programme nützen könnte: Eine Passwort- und Benutzernameeingabe in einem Pythonporgramm und dessen Überprüfung Online(für erhöhte Sicherheit).
Vielleicht hilfts euch ja :D
Es könnte leichtere/schlankere Varianten geben, aber am Ende machts in meinem Programm auch nichts aus, wenns mal 10 Zeilen länger ist! :) Aber ich würde mich trotzdem über Verbesserungsvorschläge und ähnliches freuen.

Danke, Euer dodo.

CODE(SERVER):

Code: Alles auswählen

#Vorbereiten des Log-ins
#Socketvorbereitung
import socket
ss = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
ss.bind(("",50000))
ss.listen(1)
#Logincodes
try:
 while True:
  komm, addr = ss.accept #akzeptieren der "Loginnachricht"("Syntax":"Benutzername|Passwort")
  while True:
   data = komm.recv(1024) #"Loginnachricht" wird in die Variable data kopiert
   if not data:
    komm.close() #Beenden, falls keine Nachrichten gibt.
    break
   dataf = open("loginUSR", 'r') #Öffnen der Datei, die die Benutzernamen enthält.
   datar = dataf.read()#Lesen der Datei
   datar = datar.split("\n")#Trennen der einzelnen Benutzernamen
   dirda = data.split("|")#Trennen von Benutzername und Passwort in der "Loginnachricht"
   if dirda[0] in datar:#Falls der eingegebene Benutzername in den existierenden Benutzernamen enthalten ist...
    for i in range(0,len(data)-1):...wird getestet wo.
     if datar[i] == dirda[0]:
      x = i #Feststellen des Index(Ich weiß, dass es dafür ne Funktion gibt, fiel mir nur nicht ein)
    b = open("loginPWS", 'r')#Öffnen der Passwortdatei
    c = b.read()#lesen
    c = c.split("\n")#aufteilen
    if c[x] == dirda[1]:#index vom Benutzernamen = Index vom Passwort
     komm.send("YOUCAN")#Aktzeptieren der Benutzerdaten
    else:
     komm.send("YOUCANT")#Falsches Passwort
   else:
    komm.send("YOUCANT")#Falsches Passwort
CODE(Client):

Code: Alles auswählen

#Vorbereiten...
import socket
ip = #Hier folgt die IP-Adresse des Servers
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect((ip, 50000))
try: 
    while True: 
        ben = raw_input("Benutzername: ")
        pas =  raw_input("Passwort: ")
        nachricht = ben + "|" + pas
        s.send(nachricht) 
        antwort = s.recv(1024) 
        if antwort == "YOUCAN":
         break
        else:
         print "Irgendwas war wohl falsch..."
    print "Nu bist'e drin!"
    s.close()
except:
 print "keine Internetverbindung"
 s.close()
finally:
  try: 
    s.close()

Re: Passworteingabe/-überprüfung Online

Verfasst: Freitag 22. Juni 2012, 20:38
von webspider
Seh ich das richtig, dass du das Passwort im Klartext ohne jegliche weitere Sicherheitsmaßnahmen versendest?

Re: Passworteingabe/-überprüfung Online

Verfasst: Freitag 22. Juni 2012, 21:10
von BlackJack
@dodo: Das ist Murks. Die Einrückung ist kaputt und die Socket-Programmierung ist alles andere als robust. Sicher ist die Kommunikation auch kein Stück.

Re: Passworteingabe/-überprüfung Online

Verfasst: Freitag 22. Juni 2012, 21:52
von Dav1d
webspider hat geschrieben:Seh ich das richtig, dass du das Passwort im Klartext ohne jegliche weitere Sicherheitsmaßnahmen versendest?
Wenn MD5 schon unsicher ist, wieso sich dann mit hashes und sicheren Verbindungen abmühen? :twisted:

Re: Passworteingabe/-überprüfung Online

Verfasst: Montag 25. Juni 2012, 09:07
von lunar
@dod: Der Code ist kaputt, an machen Stellen vergisst Du sogar, Funktionen aufzurufen (i.e. "komm, addr = ss.accept").

@Dav1d: Was hat MD5 mit dem Quelltext des OP zu tun?

Re: Passworteingabe/-überprüfung Online

Verfasst: Montag 25. Juni 2012, 11:14
von Dav1d
lunar hat geschrieben:@Dav1d: Was hat MD5 mit dem Quelltext des OP zu tun?
Nichts

Re: Passworteingabe/-überprüfung Online

Verfasst: Montag 25. Juni 2012, 16:39
von jens
Eine Challange/Response Geschichte würde mehr Sinn machen. Lesestoff + Links z.B. hier: http://www.pylucid.org/permalink/42/sic ... ohne-https

Abgesehen von der Code Logik, ist der Code schlecht formatiert. Am besten mal PEP-8 ansehen: http://wiki.python-forum.de/PEP%208%20% ... setzung%29