Flask Session Sicher genug für Login?

Django, Flask, Bottle, WSGI, CGI…
Antworten
bBern
User
Beiträge: 2
Registriert: Donnerstag 16. Januar 2020, 15:16

Hallo zusammen,

ich beschäftige mich aktuell mit dem Thema Flask und bin aktuell dabei mir eine kleine Seite zum testen zu erstellen, mit Login etc.

Nachdem ich jetzt auf einigen Sites gelesen habe, dass Sessions nicht für vertrauliche Dinge geeignet ist, frage ich mich ob es Sicher genug ist für den User Auth, oder ob es hier noch eine bessere/sicherere Möglichkeit gibt.

Danke & Gruß
__deets__
User
Beiträge: 14537
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wo liest du sowas? Denn es stimmt nicht. Sessions unterliegen zwangsweise allen Seiten, die sowas wie einen Login haben. Und die sind nicht alle unsicher. Was genau also meinst du damit?
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@bBern: ich weiß nicht, was Du gelesen hast. Es ist so, dass Flask standardmäßig für Sessions die ganze Information, die Du einer Session hinzufügst, als Cookie an den Browser des Nutzers schickt. Der kann natürlich diese Information beliebig lesen und ändern. Wenn Du also in die Session session['superuser'] = False schreibst, weil der Nutzer nur eingeschränkte Rechte hat, und das an anderer Stelle prüfst, kann jeder einen Cookie erzeugen, wo session['superuser'] == True steht, und somit sich mehr Rechte erschleichen.
Informationen, die der Nutzer also nicht wissen oder ändern darf, dürfen nicht in solch einer Session gespeichert sein.

Kannst Du näher beschreiben, was Du vor hast?
Benutzeravatar
__blackjack__
User
Beiträge: 13100
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Sirius3: Wenn man das Cookie signiert darf man auch Infos rein packen die der Benutzer zwar sehen aber nicht ändern können darf.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Sirius3 hat geschrieben: Donnerstag 16. Januar 2020, 16:29 @bBern: ich weiß nicht, was Du gelesen hast. Es ist so, dass Flask standardmäßig für Sessions die ganze Information, die Du einer Session hinzufügst, als Cookie an den Browser des Nutzers schickt. Der kann natürlich diese Information beliebig lesen und ändern.
Nein, kann ein Nutzer nicht.

Flask speichert die session unverschlüsselt aber in signierter Form im Cookie. Das heisst ein Nutzer kann den Inhalt sehen aber um ihn zu verändern benötigt man den Secret Key um den Cookie zu signieren. Ohne den Secret Key ist es nicht möglich den Cookie zu signieren und dass heisst das Flask den Cookie nicht akzeptiert und eine neue leere Session erstellt.

Es ist also vollkommen in Ordnung die session für Login zu benutzen und auch sowas wie superuser Status kann man in die Session packen.
__deets__
User
Beiträge: 14537
Registriert: Mittwoch 14. Oktober 2015, 14:29

@DasIch: so hätte ich auch gedacht. aber laut https://pythonhosted.org/Flask-Session/ ist das per default aus 😕
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Flask-Session ist eine separate Extension die zusätzliche SessionInterfaces bereitstellt. Der default ist genauso wie ich es beschrieben habe, siehe auch Flask's eigene Dokumentation: http://flask.palletsprojects.com/en/1.1 ... /#sessions
In addition to the request object there is also a second object called session which allows you to store information specific to a user from one request to the next. This is implemented on top of cookies for you and signs the cookies cryptographically. What this means is that the user could look at the contents of your cookie but not modify it, unless they know the secret key used for signing.
Der Code dafür ist auch gut lesbar: https://github.com/pallets/flask/blob/m ... #L346-L358
bBern
User
Beiträge: 2
Registriert: Donnerstag 16. Januar 2020, 15:16

Danke euch für die Antworten.
DasIch hat geschrieben: Donnerstag 16. Januar 2020, 16:41
Sirius3 hat geschrieben: Donnerstag 16. Januar 2020, 16:29 @bBern: ich weiß nicht, was Du gelesen hast. Es ist so, dass Flask standardmäßig für Sessions die ganze Information, die Du einer Session hinzufügst, als Cookie an den Browser des Nutzers schickt. Der kann natürlich diese Information beliebig lesen und ändern.
Nein, kann ein Nutzer nicht.

Flask speichert die session unverschlüsselt aber in signierter Form im Cookie. Das heisst ein Nutzer kann den Inhalt sehen aber um ihn zu verändern benötigt man den Secret Key um den Cookie zu signieren. Ohne den Secret Key ist es nicht möglich den Cookie zu signieren und dass heisst das Flask den Cookie nicht akzeptiert und eine neue leere Session erstellt.

Es ist also vollkommen in Ordnung die session für Login zu benutzen und auch sowas wie superuser Status kann man in die Session packen.
Das ist die Erkläung die mein Gewissen beruhigt, vielen Dank! :-)
__deets__
User
Beiträge: 14537
Registriert: Mittwoch 14. Oktober 2015, 14:29

@DasIch: Ah. Ok. War der erste Suchtreffer. Ich lese gerade aber auch das die Extension aber auch eh immer server side ist. Damit ist so eine Signatur auch nicht sooo relevant. GUID raten ist schwer.
Antworten