pwds absichern

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Costi
User
Beiträge: 544
Registriert: Donnerstag 17. August 2006, 14:21

Dienstag 10. Juli 2007, 18:31

hmmm,
weil das einer der kritischten teile ist, frag ich mal lieber nach:

(code ungetestet)

Code: Alles auswählen

class People(SQLObject, BaseRights):

    ...

    #we dont store pwds in plain text
    pwd = StringCol(maxlength=40)
    def _set_pwd(self, pwd):
        return hashlib.sha1(pwd + "mysalt").hexdigest()
    def _get_pwd(self):
        raise AcessDenied, "no direct access allowed, use `guess_pwd` instead"
    def guess_pwd(self, guess):
        if self._set_pwd(guess) == self.pwd:
            return True
        else:
            sleep(1) #make brute force offensives harder     (@leonidas: ja, das ist ein inline kommentar;-)        
            return False
ist das ok so?


danke

edit:
verdammt, wie heist den `maxlength` in SQLobject
Zuletzt geändert von Costi am Dienstag 10. Juli 2007, 20:39, insgesamt 2-mal geändert.
cp != mv
BlackJack

Dienstag 10. Juli 2007, 19:30

Was soll dass den darstellen? Und wogegen willst Du die Passwörter absichern?
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Dienstag 10. Juli 2007, 20:25

Meinst du nicht return s.digest()?
Kurz geschrieben wäre es dann:

Code: Alles auswählen

return hashlib.sha1(pwd + "mysalt").digest()
Für das speichern in die Datenbank ist es eventuell klüger hexdigest() zu verwenden.

guess_password halte ich für einen schlechten Namen. Wie wäre es mit check_password, compare_password o.ä.? ;)
Costi
User
Beiträge: 544
Registriert: Donnerstag 17. August 2006, 14:21

Dienstag 10. Juli 2007, 20:49

Meinst du nicht return s.digest()?
thx, ich meine `hexdigest`, damit man das in ein StringCol speichern kann
Was soll dass den darstellen? Und wogegen willst Du die Passwörter absichern?
das soll eine tabelle fuer benutzer einer web app darstellen
absichern will ich sie gegen nicht authorizierten zugriff (?)
cp != mv
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Dienstag 10. Juli 2007, 20:59

Costi hat geschrieben:das soll eine tabelle fuer benutzer einer web app darstellen
absichern will ich sie gegen nicht authorizierten zugriff (?)
Also das macht dein Beispiel bestimmt nicht O_o
Costi
User
Beiträge: 544
Registriert: Donnerstag 17. August 2006, 14:21

Dienstag 10. Juli 2007, 21:21

Also das macht dein Beispiel bestimmt nicht O_o
spezifizieren......
cp != mv
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Dienstag 10. Juli 2007, 21:39

Costi hat geschrieben:
Also das macht dein Beispiel bestimmt nicht O_o
spezifizieren......
Du Hasht die Passwörter, wie soll das die Tabelle vor Zugriffen schützen?
Costi
User
Beiträge: 544
Registriert: Donnerstag 17. August 2006, 14:21

Dienstag 10. Juli 2007, 21:53

das hashen schuetzt nicht direkt vor zugriffe, muss es aber nicht weil nhemand mit dem hash nichts anfangen kann.

auserdem wird das direkte auslesen des hashes mittels SQLobject nicht ermoeglich


oder?
cp != mv
BlackJack

Dienstag 10. Juli 2007, 22:06

Gegen was für Zugriffe willst Du den Hash schützen?

Und was meinst Du was in Zeile 13 passiert, wenn bei `self.pwd` die Methode `self._get_pwd()` aufgerufen wird und grundsätzlich eine Ausnahme auslöst.
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Dienstag 10. Juli 2007, 22:59

BlackJack hat geschrieben:Gegen was für Zugriffe willst Du den Hash schützen?
Ich glaube, es geht ihm einfach um die (Arbeits-)speichertechnische Sicherheit des Programmes zur Laufzeit.
BlackJack hat geschrieben:Und was meinst Du was in Zeile 13 passiert, wenn bei `self.pwd` die Methode `self._get_pwd()` aufgerufen wird und grundsätzlich eine Ausnahme auslöst.
Das sieht eher nach einer "Information" fuer Entwickler aus, als nach einem anderweitig tiefgruendigen Konstrukt.
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
BlackJack

Dienstag 10. Juli 2007, 23:05

Was ist "(Arbeits-)speichertechnische Sicherheit des Programmes zur Laufzeit"? Gegen welche Angriffe soll das schützen?

Und was meinst Du mit "einfach nur Information für Entwickler"? Ich meine ja, Quelltext der nicht funktioniert ist auch eine Art Information, aber was soll das dem Entwickler sagen!?
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Dienstag 10. Juli 2007, 23:54

Ich wollte ja eigentlich ins Bett, aber ich war dann doch noch n bissl am programmieren ^^
BlackJack hat geschrieben:Was ist "(Arbeits-)speichertechnische Sicherheit des Programmes zur Laufzeit"? Gegen welche Angriffe soll das schützen?
Ich kann auch nur Vermutungen anstellen, aber es geht wohl darum, das Passwort auch zu schuetzen, wenn ein ominoeser Angreifer die Moeglichkeit haette, den Speicher (bzw Teile davon) auszulesen.
Es hat also mehr was damit zu tun, den Passwort-Teil sauber zu programmieren, als "websicher".
BlackJack hat geschrieben:Und was meinst Du mit "einfach nur Information für Entwickler"? Ich meine ja, Quelltext der nicht funktioniert ist auch eine Art Information, aber was soll das dem Entwickler sagen!?
Es soll dem Entwickler wohl sagen: Ja, nicht selbst das Passwort pruefen, sondern die vorgefertigte Funktion dazu nutzen. Aber so fuer wirklich sinnvoll halte ich die Idee auch nicht ^^
Ja frag halt Costi... ich geh jetzt ins Bett, nachdem ich nochwas gepostet hab ^^
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Mittwoch 11. Juli 2007, 00:08

Solange der Client das Passwort im Klartext schickt, wird das immer irgendwo im Speicher des Servers vorbeikommen, egal wo man es speichert.

Wenn der Passwort-Hash nicht entdeckt werden soll (denn dann könnte man in über Rainbow Tables entziffern), muss man die Tabelle (via DBMS) und die Daten (durch entsprechende Programmierung der Webanwendung) sowie den gesamten Server entprechend absichern, damit da keiner drankommt.
Costi
User
Beiträge: 544
Registriert: Donnerstag 17. August 2006, 14:21

Mittwoch 11. Juli 2007, 01:03

wergessen wir das ganze:

ich werd doch nicht SQLobject benutzen, bin ja von django darauf umgestiegen, weil django sql`s wrapper ding fehlermelduungen einfach verschluckt das scheint aber bei SQLobject auch der fall zu sein

und wenn die template das auch sowieso schon tut wird das ganze zu schwer zum endbugen.

*frustiert*
cp != mv
Antworten