[django] Daten sichern im client cookie speichern...

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Was haltet ihr von django_tools/utils/client_storage.py -> http://github.com/jedie/django-tools/co ... 012eb9bc0b ?

Es geht darum, das man damit sicher gehen kann, das zurück erhaltene Cookie Daten nicht auf dem Client verändert wurden.

Das ganze ist allerdings nur dann zuverlässig, wenn settings.SECRET_KEY auch wirklich mit zufälligen, geheimen Daten gefüllt ist.

Bsp code:

Code: Alles auswählen

from django_tools.utils.client_storage import ClientCookieStorage

def view1(request):
    response = HttpResponse("Hello World!")
    c = ClientCookieStorage(cookie_key="my_key")
    response = c.save_data(my_data_string, response)
    return response

def view2(request):
    c = ClientCookieStorage(cookie_key="my_key")
    data = c.get_data(request)
    if data is not None:
       ...do something...

Ich habe es dazu genutzt, um "Username", "Email" und "Homepage url" beim einem Anonymen Kommentar auf dem Client speichern und das nächste mal wieder verwenden kann...

Wer ein github Account hat, natürlich Code Kommentare direkt dort abgeben ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Gemäß der Regel, Algorithmen nicht selbst zu erfinden, für die es Standardlösungen gibt, wäre meine Empfehlung, einen HMac zu benutzen, eine der (zu) wenigen Crypto-Funktionen, die Python direkt unterstützt.

Stefan
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Gute Idee. Ich hab es mir mal notiert...

Doch ich sollte auch mal nachsehen, was django.messages macht. Denn da wird auch etwas per cookie sicher gespeichert, glaube ich...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:


GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
/me
User
Beiträge: 3556
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

jens hat geschrieben:TODO: ich sollte https://docs.djangoproject.com/en/1.4/topics/signing/ nutzten ;)
Die Änderungen in Django1.4 hatte ich mir noch gar nicht angesehen. Es scheint, als würde es Zeit dafür.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ist das nicht das gleiche was mitsuhiko schon vor Jahren als Secure-Cookie implementiert hat?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Ja.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

So, mit django-tools v0.23 wird auf django.core.signing zurück gegriffen: https://github.com/jedie/django-tools/c ... d09d204a50
Genauer gesagt nutzte ich signing.dumps() und signing.loads()...

Kann dann so aussehen:

Code: Alles auswählen

from django_tools.utils.client_storage import ClientCookieStorageError, ClientCookieStorage

def view1(request):
    response = HttpResponse("Hello World!")
    c = ClientCookieStorage(cookie_key="my_key", max_age=60)
    response = c.save_data(my_data, response)
    return response

def view2(request):
    c = ClientCookieStorage(cookie_key="my_key", max_age=60)
    try:
        data = c.get_data(request)
    except ClientCookieStorageError, err:
        #...cookie missing or outdated or wrong data...
    else:
        #...do something with the data...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Ich seh den Sinn dahinter noch nicht ganz, django kann das OOTB selber auch...
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

apollo13 hat geschrieben:Ich seh den Sinn dahinter noch nicht ganz, django kann das OOTB selber auch...
Wenn das so ist, sehe ich den Sinn darin auch nicht ;)

Ist das eines der neuen Feature von 1.4 die ich noch nicht kenne? Hab mir eh noch nicht alles angesehen, sondern erstmal geschaut, das alles mit 1.4 läuft...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

https://docs.djangoproject.com/en/dev/t ... d-sessions ;)

Klar es ist jetzt auf die Session bezogen, aber das reicht im Normalfall denk ich...
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Also wofür ich den Kram überhaupt z.Z. Nutzte: Wenn ein Anonymous User bei mit einen Kommentar abgibt, wird im Cookie der angegebene Username/Email usw. gespeichert und beim nächsten mal wieder verwendet. Das ist alles...

Nicht wirklich sicherheitsrelevant und eigentlich auch nur ein nice-to-have gimmick...

Die von dir angegebene Stelle scheint mir so, das man damit generell alle Session Daten als Cookies hinterlegen kann. Das ist schon etwas anderes...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten