Project

General

Profile

Bug #45667

poser samesite=none sur les cookies de session

Added by Frédéric Péters 5 days ago. Updated 2 days ago.

Status:
Solution déployée
Priority:
Normal
Category:
-
Target version:
-
Start date:
31 Jul 2020
Due date:
% Done:

0%

Patch proposed:
Yes
Planning:
No

Description

Chrome a commencé à considérer l'absence d'attribut samesite comme voulant dire samesite=lax, et plus samesite=none.

This feature will be rolled out gradually to Stable users starting July 14, 2020. See https://www.chromium.org/updates/same-site for full timeline and more details.
https://www.chromestatus.com/feature/5633521622188032

Dans la branche https://git.entrouvert.org/authentic.git/log?h=wip%2F42227-safari-samesite j'avais déjà fait le boulot (la branche a été automatiquement supprimée mais heureusement j'en avais une copie locale); le revoici, dans hobo, pour concerner tous les modules.

0001-middleware-transform-cookies-to-have-SameSite-None-4.patch View (3.55 KB) Frédéric Péters, 31 Jul 2020 04:38 PM

0001-middleware-transform-cookies-to-have-SameSite-None-4.patch View (3.58 KB) Frédéric Péters, 01 Aug 2020 07:38 PM

Associated revisions

Revision 8b40112c (diff)
Added by Frédéric Péters 2 days ago

middleware: transform cookies to have SameSite=None (#45667)

History

#1 Updated by Frédéric Péters 5 days ago

Bien sûr ça ne le fait pas pour wcs qui n'a pas ses noms de cookies dans settings.etc. et il y faudra sans doute un patch (sinon a priori ça marcherait mais referait le SSO à chaque coup d'affichage du menu). (ce qu'on pourrait se dire ok en misant sur le menu construit depuis le combo agent).

Pour activer l'affaire dans chrome, ce serait chrome://flags et chercher/activer cookies-without-same-site-must-be-secure (mais ça ne change rien pour moi et je ne vais pas me battre).

#2 Updated by Frédéric Péters 5 days ago

(pointé par Thomas, https://github.com/jotes/django-cookies-samesite qui fait davantage, notamment workaround de vieilles versions de chrome où poser samesite=none poserait problème mais on peut faire sans on parle de version 66 et je ne vais pas en chercher la date).

#3 Updated by Thomas Noël 5 days ago

Pour pas qu'on soit ennuyés plus tard, je propose de s'imaginer déjà compatible Django 2.2 sur cette affaire...?

Pour l'import de MiddlewareMixin (inspiré de ce que j'ai vu dans https://github.com/jotes/django-cookies-samesite)

try:
    from django.utils.deprecation import MiddlewareMixin
except ImportError:
    MiddlewareMixin = object

Et au niveau de debian/debian_config_common.py je ferais un ajout du middleware seulement pour Django avant 2.2 :

    if PROJECT_NAME != 'wcs':
        if django.VERSION >= (2,2):
            MIDDLEWARE = ('hobo.middleware.RobotsTxtMiddleware',) + MIDDLEWARE
        else:
            MIDDLEWARE = (
                'hobo.middleware.RobotsTxtMiddleware',
                'hobo.middleware.CookiesSameSiteFixMiddleware',
            ) + MIDDLEWARE

Mais, plus gênant, on a dans le code de hobo multitenant des modifications de settings.CSRF_COOKIE_NAME et settings.SESSION_COOKIE_NAME selon le tenant :

tenant_settings.CSRF_COOKIE_NAME = 'csrftoken-%s' % domain_hash
tenant_settings.SESSION_COOKIE_NAME = 'sessionid-%s' % domain_hash

Donc à mon avis il faut charger le hobo.middleware.CookiesSameSiteFixMiddleware après hobo.multitenant.middleware.TenantMiddleware

#4 Updated by Frédéric Péters 4 days ago

Pour l'import de MiddlewareMixin (inspiré de ce que j'ai vu dans https://github.com/jotes/django-cookies-samesite)

Oui mais on ne fait pas ça ailleurs et surtout MiddlewareMixin existe déjà toujours même dans les derniers django, je dirais même avoir lu que ça sortirait des bouts deprecated mais je ne retrouve pas cette info.

Et au niveau de debian/debian_config_common.py je ferais un ajout du middleware seulement pour Django avant 2.2 :

Pas tout à fait sûr de django 2.2 en fait, dans django-cookies-samesite ils parlent de version 3 pour que ça soit géré correctement.

Donc à mon avis il faut charger le hobo.middleware.CookiesSameSiteFixMiddleware après hobo.multitenant.middleware.TenantMiddleware

Yep, je l'avais ainsi en local sans passer par debian/debian_config_common.py. (à noter que je l'ajoute aussi encore pour les applications utilisant MIDDLEWARE_CLASSES, chose qui devrait disparaitre).

#5 Updated by Thomas Noël 4 days ago

  • Status changed from Solution proposée to Solution validée

#6 Updated by Frédéric Péters 2 days ago

  • Status changed from Solution validée to Résolu (à déployer)
commit 8b40112c35e913d82a3bdc827533fe4005f9e4b6
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Fri Jul 31 16:34:58 2020 +0200

    middleware: transform cookies to have SameSite=None (#45667)

#7 Updated by Frédéric Péters 2 days ago

  • Status changed from Résolu (à déployer) to Solution déployée

Also available in: Atom PDF